我有一个用户模型和一个角色模型。它们通过has_and_belongs_to_many关系加入。当管理员创建用户时,我希望他们能够为用户分配角色并在我调用@ user.save
时将其保存但事情是,我得到一个警告,我无法大规模分配角色关系。
关于如何解决此问题的任何建议,我在Rails 2.3.2上
感谢。
编辑:按要求编写代码。
user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :roles,
:join_table => "users_roles",
:foreign_key => "role_id",
:associated_foreign_key => "user_id"
end
role.rb
class Role < ActiveRecord::Base
has_and_belongs_to_many :users,
:join_table => "users_roles",
:foreign_key => "user_id",
:association_foreign_key => "role_id"
end
查看:new.html.haml
- form_for(@user, users_path(:subdomain => current_account.subdomain)) do |f|
.input_set
= f.label(:login, "Username")
= f.text_field(:login)
.input_set
= f.label(:name)
= f.text_field(:name)
.input_set
= f.label(:email)
= f.text_field(:email)
- fields_for("user[roles][]", Role)do |user_role|
.input_set
%label Role
= user_role.select(:name, Role.all.map{|r| [r.name, r.id] })
.input_set
= f.label(:password)
= f.password_field(:password)
.input_set
= f.label(:password_confirmation, "Password Again")
= f.password_field(:password_confirmation)
.input_set
%label
= f.submit "Add User"
我希望通过在我的create选项中调用@ user.save将Role保存到用户。那可能吗?或者这是一种我不能以这种方式使用的关系,它是否需要一个has_many关系让我能够做到这一点。
答案 0 :(得分:2)
我认为您需要在模型中要保存的属性上调用attr_accessible,以避免质量分配错误。
答案 1 :(得分:1)
您不能将accepts_nested_attributes_for用于habtm关系。
您可以设置role_ids,有关详细信息,请参阅Railscast第17集
在你的情况下,问题是你只设置一个角色但是有habtm关系,为什么不是belongs_to?
答案 2 :(得分:0)
您使用的是新的accepts_nested_attributes_for方法吗?
它可能看起来像这样:
class User < ActiveRecord::Base
accepts_nested_attributes_for :roles, :allow_destroy => true
end
答案 3 :(得分:0)
考虑到问题被问到的时间,你可能已经自己解决了这个问题......
事情是,我得到了一个 警告我无法批量分配 角色关系。
这是由用户模型中的两件事之一引起的。
在attr_accessible调用中添加:roles或从attr_protected调用中删除它。
答案 4 :(得分:0)
如果我可以编辑/添加答案,我会。我有类似@EmFi提到的类似内容。我有attr_accessible设置,并且必须添加等效的
:role_ids
到用户模型的attr_accessible。注意复数。以下选项不工作:
要清楚我收到的错误消息:
WARNING: Can't mass-assign these protected attributes: role_ids
这个警告对我来说没有多大意义,因为我正在使用habtm关系。不过,这是正确的。