Получение Не удается массово назначить защищенные атрибуты: для вложенных_атрибутов

Я на Rails3, у меня есть две модели: User и Post. Пользователь имеет сообщения как вложенные атрибуты. когда я пытаюсь сохранить пользователя, я получаю Невозможно массово назначать защищенные атрибуты:.....




Ответы (3)


Попробуйте это attr_accessible в своей модели поста

http://railscasts.com/episodes/26-hackers-love-mass-assignment

person Sachin R    schedule 06.06.2013

если определения модели выглядят следующим образом:

пользователь.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

person Muntasim    schedule 06.06.2013

Массовое присвоение — это имя, которое 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.

person Arvind singh    schedule 24.02.2014