обновить вложенный атрибут: ПРЕДУПРЕЖДЕНИЕ: невозможно массовое назначение защищенных атрибутов: ошибка - PullRequest
2 голосов
/ 17 февраля 2012

Я потратил столько времени на это и потерял половину своих волос, потянув их. Помощь.

user * * 1004

    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 Ответ

0 голосов
/ 17 февраля 2012

Для начала необходимо убедиться, что модель включает 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 имеет несколько бесплатных скринкастов во вложенных формах, которые стоит проверить, приведенный выше код не решает проблему.

...