5
我在has_many
through
關聯中使用find_or_create_by
時遇到了問題。當我roles
相關聯的User
對象的調用find_or_create_by
通過`has_many```通過`關聯使用`find_or_create_by`時出錯
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
滑軌引發錯誤。
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>
我能夠改變我的代碼來解決如下問題:
unless u.roles.exists?(:rolename => "admin")
u.roles << Role.find_or_create_by_rolename("admin")
end
我好奇地發現,如果find_or_create_by
作品與has_many
through
協會。
是的,問題侷限於:通過。我會更新這個問題來反映這一點。 – 2010-02-09 22:13:00
我不認爲你會得到任何更多的答案在這一個。 'find_or _...'方法不應該與':through'關聯一起工作。 您可以通過刪除'Permission'模型並使用'has_and_belongs_to_many'關係和一個簡單的映射表來實現它的唯一方法。 – 2010-02-09 22:18:39
調用'u.roles.find_by_rolename(「admin」)''與'has_many:through'配合使用。所以我想'u.roles.find_or_create_by_rolename(「admin」)'可能會工作。你能指點我指定這個警告的文檔嗎? – 2010-02-09 22:33:00