Rails 3.0.5 Вложенная форма - Невозможно создать новый - ВНИМАНИЕ: Не удается массово назначить защищенные атрибуты - PullRequest
0 голосов
/ 27 марта 2011

У меня проблемы с сохранением двух полей во вложенной форме. Родительское поле сохраняет нормально, но вложенное поле выдает ошибку «ПРЕДУПРЕЖДЕНИЕ: Не удается массово назначить защищенные атрибуты».

Я поместил вещи в модель Item с помощью attr_accessible, но это не решает проблему.

List_controller

def create
  @list = List.new(params[:list])
  @list[:user_id] = current_user.id
  if @list.save
    flash[:notice] = "Successfully created list."
    redirect_to @list
  else
    render :action => 'new'
  end
end

Список моделей

class List < ActiveRecord::Base
  has_many :items, :dependent => :destroy
  accepts_nested_attributes_for :items, :reject_if => lambda { |a| a[:name].blank? },     :allow_destroy => true
end

Модель товара

class Item < ActiveRecord::Base
  belongs_to :list
end

Форма

<%= form_for(@list) do |list_form| %>

  <p>
    <%= list_form.label :title %><br />
    <%= list_form.text_field :title %>
  </p>

  <p>
  <%= render :partial => 'item_fields',
         :locals => {:form => list_form} %>
  </p>

  <%= list_form.submit %>
<% end %>

Форма частичная

<%= form.fields_for :item do |item_form| %>
    <%= item_form.label :name, 'item' %>
    <%= item_form.text_field :name %>
<% end %>

Журнал ошибок сервера

Started POST "/lists" for 127.0.0.1 at Sun Mar 27 02:54:18 -0400 2011
  Processing by ListsController#create as HTML
  Parameters: {"commit"=>"Create List", "list"=>{"title"=>"figaro", "item"=>{"na
me"=>"foobar"}}, "authenticity_token"=>"afu5xPgvJenu6XKXcsyilR8RconLP/OZ3NxsICE3RVk=
", "utf8"=>"Γ£ô"}
  ←[1m←[35mUser Load (1.0ms)←[0m  SELECT "users".* FROM "users" WHERE "users"."i
d" = 2 LIMIT 1


WARNING: Can't mass-assign protected attributes: item


  ←[1m←[36mAREL (2.0ms)←[0m  ←[1mINSERT INTO "lists" ("user_id", "updated_at", "
title", "created_at") VALUES (2, '2011-03-27 06:54:18.893302', 'figaro', '2011-0
3-27 06:54:18.893302')←[0m
Redirected to http://localhost:3000/lists/77
Completed 302 Found in 117ms

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Вы используете fields_for :item, но ваша List модель has_many :items.

Попробуйте:

<%= form.fields_for :items do |item_form| %>

Если это не поможет, попробуйте добавить attr_accessible :items_attributesВам List модель.Из документов :

[..] Если вы используете attr_protected или attr_accessible, вам нужно будет добавить средство записи атрибутов в список разрешенных.*

0 голосов
/ 27 марта 2011

Добавьте attr_accessible :items в свой класс List.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...