具有复选框的嵌套对象 – 即使使用accepts_nested_attributes_for进行质量分配?
我认为应该有一个简单的解决方案,因为Rails 2.3具有这种新奇的嵌套表单function。 基本上我想创建或更新用户并同时为他们分配角色。
看起来我正在做的一切正确,但我收到错误警告:无法批量分配这些受保护的属性:roles_attrributes 。
我甚至尝试将视图更改为用户[permissions_attrributes] [role_id],因为我认为可能连接表混淆了Rails。
无论如何,关于这应该如何实际工作的任何建议?
模型
class User :permissions accepts_nested_attributes_for :roles accepts_nested_attributes_for :permissions end
从视图中摘录(注意我试过并且没有得到fields_for来生成我想要的东西,也许那是我的问题?)
遇到的参数似乎是正确的:
{"user"=>{"password_confirmation"=>"[FILTERED]", "roles_attrributes"=>{"id"=>"2"}, ...
解决方案我错误拼写的组合,不使用attr_accessible,需要访问permissions_attributes,并且表单稍微关闭。
模型:
has_many :permissions, :dependent => :destroy has_many :roles, :through => :permissions accepts_nested_attributes_for :permissions attr_accessible :permissions_attributes
视图:
"rolename ASC").each_with_index do |role,idx| %>
听起来这个属性没有标记为更新安全。 您应该可以通过将以下内容添加到模型类来修复它:
attr_accessible :roles
或者可能:
attr_accessible :roles_attributes
如果你看,你可能已经有一个attr_accessible调用,你可以添加它。 有关更多信息,请在此处记录:
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002226
如果您更正了check_box_tag
中属性的拼写,它看起来应该可以正常工作。
<% for role in Role.all %> <%= check_box_tag( "user[roles_attributes][id]",role.id) %> <%= role.rolename %>
<% end %>