Обновить вложенный атрибут: ПРЕДУПРЕЖДЕНИЕ: невозможно массовое назначение защищенных атрибутов: ошибка
Я потратил столько времени на это и потерял половину своих волос, потянув их. Помогите.
user
:
has_may :rights
attr_accessible :rights_attributes
right
:
belongs_to :user
attr_accessible :user_id, :pgd_id, :link_id
Посмотреть:
<%= semantic_form_for @user, :url => {:action => "rightsupdate", :id => @user.id} do |f| %>$
<%= f.inputs do %>$
<%= f.input :pgds, :as => :check_boxes, :required => false %>$
<% end %>$
<%= f.input :link_id, :value => @owner.link_id, :as => :hidden %>$
<%= f.buttons %>$
<% end %>$
но когда я обновляю, он продолжает говорить:
WARNING: Can't mass-assign protected attributes: pgd_ids, link_id
Я могу обойти pdg
добавляя :pgd_ids
пользователю attr_accessible
но не link_id
, link_id
вставляется как NULL
,
1 ответ
Для начала нужно убедиться, что модель включает accepts_nested_attributes
,
user.rb
attr_accessible :rights_attributes
has_may :rights
accepts_nested_attributes :rights
Затем вам нужно обернуть поля прав в fields_for
блок. Похоже, вы используете Formtastic, с которым я не знаком, но я думаю, что это должно выглядеть примерно так:
<%= semantic_form_for @user, :url => {:action => "rightsupdate", :id => @user.id} do |f| %>
<%= f.semantic_fields_for :rights do |builder| %>
<%= builder.inputs do %>
<%= builder.input :pgds, :as => :check_boxes, :required => false %>
<% end %>
<%= builder.input :link_id, :value => @owner.link_id, :as => :hidden %>
<%= builder.buttons %>
<% end %>
<% end %>
В Railscasts есть несколько бесплатных скринкастов во вложенных формах, которые стоит проверить, приведенный выше код не решает проблему.