我认为应该有一个简单的解决方案,因为 Rails 2.3 具有这种新奇的嵌套表单功能。基本上我想创建或更新一个用户并同时为他们分配角色。
似乎我做的一切都是正确的,但我收到错误警告:无法批量分配这些受保护的属性:roles_attributes。
我什至尝试将视图更改为 user[permissions_attributes][role_id] 因为我认为可能连接表让 Rails 感到困惑。
无论如何,关于这应该如何实际工作的任何建议?
模型
class User < ActiveRecord::Base
has_many :permissions
has_many :roles, :through => :permissions
accepts_nested_attributes_for :roles
accepts_nested_attributes_for :permissions
end
视图摘录(注意我尝试并未能让 fields_for 在这里生成我想要的东西,也许这是我的问题?)
<% for role in Role.all %>
<%= check_box_tag( "user[roles_attrributes][id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>
遇到的参数似乎是正确的:
{"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
看法:
<% Role.all(:order => "rolename ASC").each_with_index do |role,idx| %>
<%= check_box_tag( "user[permissions_attributes][#{idx}][role_id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>