Я подумал, что должно быть простое решение, учитывая, что в Rails 2.3 есть эта новая функция вложенных форм. По сути, я хочу создать или обновить пользователя и назначить ему роли одновременно.
Кажется, что я все делаю правильно, но я получаю ошибку ВНИМАНИЕ: Не удается назначить массово эти защищенные атрибуты: role_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 %>
Параметры, которые встречаются, кажутся правильными:
{"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 %>