Я на Rails3, у меня есть две модели: User и Post. Пользователь имеет сообщения как вложенные атрибуты. когда я пытаюсь сохранить пользователя, я получаю Невозможно массово назначать защищенные атрибуты:.....
Получение Не удается массово назначить защищенные атрибуты: для вложенных_атрибутов
Ответы (3)
Попробуйте это attr_accessible
в своей модели поста
http://railscasts.com/episodes/26-hackers-love-mass-assignment
если определения модели выглядят следующим образом:
пользователь.rb
class User < ActiveRecord::Base
attr_accessible :name, :posts_attributes
has_many :posts
accepts_nested_attributes_for :posts
end
пост.рб
class Post < ActiveRecord::Base
attr_accessible :title, :content :user_id
end
тогда все должно быть хорошо. Вы можете сохранить пользователя с сообщениями как вложенные атрибуты.
Вот пример кодов для начинающих :)
https://github.com/railscash/sample_change_user_role
Массовое присвоение — это имя, которое Rails дает процессу создания вашего объекта с хэшем параметров. Это «массовое присваивание» в том смысле, что вы присваиваете несколько значений атрибутам с помощью одного оператора присваивания.
Следующие фрагменты выполняют массовое присвоение имени и атрибута темы модели Post:
Post.new(:name => "John", :topic => "Something")
Post.create(:name => "John", :topic => "Something")
Post.update_attributes(:name => "John", :topic => "Something")
Чтобы это работало, ваша модель должна разрешать массовые назначения для каждого атрибута в хэше, который вы передаете.
Есть две ситуации, в которых это не удастся:
У вас есть объявление attr_accessible, которое не включает :name
У вас есть attr_protected, который включает :name
Недавно стало по умолчанию, что атрибуты должны быть вручную добавлены в белый список через attr_accessible, чтобы массовое назначение было успешным. До этого атрибуты по умолчанию могли назначаться, если только они не были явно занесены в черный список attr_protected или любой другой атрибут не был занесен в белый список с помощью attr_accessible.