Rails - Accepts_nested_attributes_for ошибка массового назначения

В настоящее время я пытаюсь настроить форму с вложенными полями в отношении принадлежности_к, но сталкиваюсь с ошибкой массового назначения. Мой код пока выглядит следующим образом (некоторые html удалены):

Модель продажи:

class Sale < ActiveRecord::Base
  attr_accessible :customer_attributes
  belongs_to :customer
  accepts_nested_attributes_for :customer
end

новый.html.erb:

<div class="container">
  <%= form_for :sale, :url => sales_path do |sale| -%>
    <%= sale.fields_for :customer do |customer_builder| %>
      <%= render :partial => "customers/form", :locals => {:customer => customer_builder, :form_actions_visible => false} %>
    <% end -%>
  <% end -%>

клиенты/_form.html.erb

<fieldset>
  <label class="control-label">Customer Type</label>
  <%= collection_select(:customer, :customer_type_id, CustomerType.all, :id, :value, {}, {:class => "chzn-select"}) %>
</fieldset>

Я считаю, что это должно позволить мне создать объект «Продажа» и вложенный объект «Клиент». Отправляемые параметры (обратите внимание, что включены некоторые несвязанные параметры):

{"utf8"=>"✓",
"authenticity_token"=>"qCjHoU9lO8VS060dXFHak+OMoE/GkTMZckO0c5SZLUU=",
"customer"=>{"customer_type_id"=>"1"},
"sale"=>{"customer"=>{"features_attributes"=>{"feature_type_id"=>"1",
"value"=>"jimmy"}}},
"vehicle"=>{"trim_id"=>"1",
"model_year_id"=>"1"}}

Ошибка, которую я получаю:

Can't mass-assign protected attributes: customer

Я понимаю, почему это может быть так, поскольку :customer отсутствует в списке attr_accessible для продажи, хотя не должна ли форма отправлять атрибуты customer_attributes вместо клиента?

Любая помощь/совет приветствуется.

РЕДАКТИРОВАТЬ 1: Насколько я могу судить, attr_accessible в модели продажи должен быть покрыт :customer_attributes - если кто-то говорит иначе, пожалуйста, дайте мне знать.

РЕДАКТИРОВАТЬ 2: Я пробовал различные перестановки, но я не могу получить параметры для отправки customer_attributes вместо просто клиента - возможно, я пропустил тег или использовал неправильный тег где-то в формах выше?

РЕДАКТИРОВАТЬ 3: я нашел еще один вопрос на SO, который указывал на проблему с частью :url => в теге form_for - вопрос касался настройки формы, но мне интересно, может ли это быть причиной проблемы здесь?


person Harry    schedule 21.08.2012    source источник
comment
Я полагаю, что у этого парня была та же проблема: 3 ошибки массового назначения с полями для">stackoverflow.com/questions/12061217/ . Прочитайте последний комментарий ответа, это может помочь.   -  person Robin    schedule 22.08.2012
comment
Этот вопрос, кажется, был из-за некоторых помощников клиентов, но здесь таких помощников нет.   -  person Harry    schedule 22.08.2012


Ответы (2)


Это может быть проблемой... из документов API:

Использование с атрибутом attr_accessible

Использование attr_accessible может помешать вложенным атрибутам, если вы не будете осторожны. Например, если вышеприведенная модель Member использовала attr_accessible следующим образом:

attr_accessible :name

Вам нужно будет изменить его, чтобы он выглядел так:

attr_accessible :name, :posts_attributes

http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html#label-Using+with+attr_accessible

person jordanpg    schedule 21.08.2012
comment
Насколько я могу судить, я покрыл это, добавив :customer_attributes к attr_accessible on Sale — это то, о чем вы говорили? - person Harry; 22.08.2012

В конце концов я получил ответ здесь. Ключом была эта строка:

<%= collection_select(:customer, :customer_type_id, CustomerType.all, :id, :value, {}, {:class => "chzn-select"}) %>

который нужно было изменить на:

<%= customer.collection_select(:customer_type_id, CustomerType.all, :id, :value, {}, {:class => "chzn-select"}) %>

Как только это было изменено, все встало на свои места.

person Harry    schedule 22.08.2012