У меня две модели, Car
и Manufacturer
. Эти модели довольно просты:Rails - вложенная модель: не может назначить защищенные атрибуты
class Car < ActiveRecord::Base
attr_accessible :manufacturer_id, :car_name, :descr, ...
belongs_to :manufacturer
...
end
и
class Manufacturer < ActiveRecord::Base
attr_accessible :name, :url
has_many :cars
...
end
Вид (views/cars/_form.html.haml
) с формой для ввода данных:
= form_for @car do |f|
.field
= f.label :car_name
= f.text_field :car_name
...
= f.fields_for @manufacturer do |m|
.field
= m.label :name
= m.text_field :name
...
Когда я отправить форму для сохранения введенной информации (это идет CarsController
), я получаю эту ошибку:
Can't mass-assign protected attributes: manufacturer
Я пытался добавить
accepts_nested_attributes_for :manufacturer
к Car
модели, но это не помогло мне ...
Где проблема?
EDIT: Как я храню данные в контроллере:
@manufacturer = Manufacturer.new(params[:car][:manufacturer])
@car = @manufacturer.cars.build(params[:car])
EDIT2: Данные из журнала:
{"utf8"=>"✓",
"_method"=>"put",
"authenticity_token"=>"4vcF5NV8D91DkxpCsqCzfbf05sOYsm7ssxZvPa3+kXo=",
"car"=>{"car_name"=>"...",
"descr"=>"...",
"categroy_ids"=>["2",
"3",
"4"],
"manufacturer"=>{"name"=>"Company",
"url"=>"..."}},
"commit"=>"Save",
"id"=>"..."}
Спасибо
Ваши 'params [: car]' содержит атрибуты производителя. Попробуйте следующее: '@manufacturer = Manufacturer.new (params [: car] .delete (: производитель)); @car = @ manufacturer.cars.build (params [: car]) ' – codeit
Пока @codeit находится на месте, вы можете посмотреть на' accepts_nested_attributes' для этой цели. – Matt
codeit - спасибо, но - как обновить действие 'update'? Сохранение нового элемента работает хорошо, но получение такой же ошибки при обновлении данных ... – user984621