Допустим, у меня есть схема, в которой ящик для яблок содержит ноль или более яблок. При редактировании ящика для яблок в форме я хочу перечислить яблоки и поставить флажок рядом с каждым яблоком, чтобы удалить его при отправке формы.
Нет ничего плохого, что я вижу. В моей модели я говорю
class AppleCrate < ActiveRecord::Base
has_many :apples
accepts_nested_attributes_for :apples, :allow_destroy => true
...
end
У меня форма работает, насколько я могу судить. Флажки отображаются в виде html, и когда форма обрабатывается контроллером, каждое яблоко в списке имеет атрибут «_destroy», который устанавливается в «1» или «0» в зависимости от того, отмечен ли я ранее представление.
Согласно API Rails, когда я устанавливаю _destroy в 1 и сохраняю, яблоко должно быть удалено. Но когда я отправляю форму, я получаю
ActiveRecord :: UnknownAttributeError в AppleCrateController # update
неизвестный атрибут: _destroy
...
"apple_crate" => {"id" => "10101", "apple" => {"1" => {"id" => "1",
"Разновидность" => "Бабушка Смит",
"Apple_crate_id" => "10101",
"_Destroy" => "1"},
"2" => { "ID" => "2",
"разнообразие" => "Фуджи",
"Apple_crate_id" => "10101",
"_Destroy" => "1"},
"3" => { "ID" => "3",
"Разнообразие" => "макинтош",
"Apple_crate_id" => "10101",
"_Destroy" => "0"},
...
и т. Д.
Я, должно быть, упускаю что-то очевидное, но после нескольких дней суеты я не могу этого понять. Я могу успешно делать все остальное - обновлять, редактировать, индексировать и т. Д. - пока я пропускаю атрибут: _destroy. Есть идеи?
(Для чего я стою, я запускаю rails 3.2.2 на Windows.)
Обновлен:
Это - это то, что я смотрю в документации. (См. Подраздел «Один ко многим».)
Обновлен:
Как и просили в комментариях, вот вид:
<%= form_for @apple_crate do |f| %>
<% @apples = @apple_crate.apples %>
<% @apples.each do |apple| %>
<%= fields_for "apples[]", apple do |apple_fields| %>
<%= apple_fields.text_field :variety %>
<%= apple_fields.hidden_field :apple_crate_id %>
<%= apple_fields.hidden_field :id %>
<%= apple_fields.check_box :_destroy %>
<% end %>
<% end %>
<%= f.submit "Save" %>
<% end %>