Bil*_*ill 7 activerecord ruby-on-rails associations actionview
我认为应该有一个简单的解决方案,因为Rails 2.3具有这种新奇的嵌套表单功能.基本上我想创建或更新用户并同时为他们分配角色.
看起来我正在做的一切正确,但我收到错误警告:无法批量分配这些受保护的属性:roles_attrributes.
我甚至尝试将视图更改为用户[permissions_attrributes] [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
Run Code Online (Sandbox Code Playgroud)
从视图中摘录(注意我试过并且没有得到fields_for来生成我想要的东西,也许那是我的问题?)
<% for role in Role.all %>
<%= check_box_tag( "user[roles_attrributes][id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>
Run Code Online (Sandbox Code Playgroud)
遇到的参数似乎是正确的:
{"user"=>{"password_confirmation"=>"[FILTERED]",
"roles_attrributes"=>{"id"=>"2"}, ...
Run Code Online (Sandbox Code Playgroud)
解决方案我错误拼写的组合,不使用attr_accessible,需要访问permissions_attributes,并且表单稍微关闭.
模型:
has_many :permissions, :dependent => :destroy
has_many :roles, :through => :permissions
accepts_nested_attributes_for :permissions
attr_accessible :permissions_attributes
Run Code Online (Sandbox Code Playgroud)
视图:
<% 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 %>
Run Code Online (Sandbox Code Playgroud)
如果你更正了你的属性的拼写check_box_tag
,它看起来应该工作.
<% for role in Role.all %>
<%= check_box_tag( "user[roles_attributes][id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>
Run Code Online (Sandbox Code Playgroud)
听起来这个属性没有被标记为可以安全更新。您应该能够通过将以下内容添加到模型类来修复它:
attr_accessible :roles
Run Code Online (Sandbox Code Playgroud)
或者可能:
attr_accessible :roles_attributes
Run Code Online (Sandbox Code Playgroud)
如果您查看,您可能已经有一个 attr_accessible 调用,您可以将其添加到其中。有关详细信息,请参阅此处:
http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002226
归档时间: |
|
查看次数: |
6480 次 |
最近记录: |