我認爲應該是一個簡單的解決這個,因爲Rails的2.3有這個新奇的嵌套形式的功能。基本上我想創建或更新一個用戶,並在同一時間分配他們的角色。嵌套的對象W /複選框 - 大衆分配甚至accepts_nested_attributes_for?
看來我正在做的一切正確,但我得到的錯誤警告:無法批量分配這些受保護的屬性: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
從視圖中摘錄(注意我嘗試和失敗,讓fields_for產生什麼,我想在這裏,也許這是我的問題嗎?)
<% for role in Role.all %>
<%= check_box_tag("user[roles_attrributes][id]",role.id) %>
<%= role.rolename %>
<br/>
<% end %>
PARAMS未來跨越似乎是右:
{"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 %>
這是我的理解,accept_nested_attributes_for不需要。無論如何,我已經嘗試過兩種都沒有工作。 – Bill 2009-04-07 20:09:49
該錯誤消息絕對是一個會通過attr_protected或attr_accessible問題引起的。另外http://apidock.com/rails/ActiveRecord/NestedAttributes/ClassMethods/accepts_nested_attributes_for表明即使使用ANAF也需要注意這一點。可能值得仔細觀察? – 2009-04-07 20:21:26