具有复选框的嵌套对象 – 即使使用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 %>