5
Bir has_many
through
ilişkilendirmesinde find_or_create_by
kullanırken bir soruna yanıt veriyorum. Bir User
nesnenin roles
ilişkisi üzerine find_or_create_by
çağırmak zaman`find_or_create_by` bir` has_many `` `` ilişkisinde kullanırken hata
class Permission < ActiveRecord::Base
belongs_to :user
belongs_to :role
end
class Role < ActiveRecord::Base
# DB columns: user_id, role_id
has_many :permissions
has_many :users, :through => :permissions
end
class User
has_many :permissions
has_many :roles, :through => :permissions
end
Raylar hata verir.
unless u.roles.exists?(:rolename => "admin")
u.roles << Role.find_or_create_by_rolename("admin")
end
ı bulmak için merak ediyorum eğer has_many
through
derneklerle find_or_create_by
çalışır:
u = User.first
u.roles.find_or_create_by_rolename("admin")
# Rails throws the following error
# NoMethodError: undefined method `user_id=' for #<Role id: nil, rolename: nil,
# created_at: nil, updated_at: nil>
Ben şöyle kodumu değiştirerek soruna başardı.
Evet, sorun şu şekilde sınırlandı:. Soruyu yansıtacak şekilde güncelleyeceğim. –
Bunun hakkında daha fazla cevap alacağınızı düşünmüyorum. 'Find_or _...' yöntemlerinin ':' 'dernekler ile çalışması gerekmez. Çalışmasını sağlayabilmenin tek yolu, 'Permission' modelini silerek ve basit bir haritalama tablosuyla bir 'has_and_belongs_to_many' ilişkisini kullanarak olacaktır. –
"u.roles.find_by_rolename (" admin ") gibi çağrılar,' has_many: through' ile çalışır. Bu yüzden u.roles.find_or_create_by_rolename ("admin") 'ın çalışabileceğini düşündüm. Bu uyarının belirlendiği belgeye işaret edebilir misiniz? –