Rails 3 ActiveRecord :: UnknownAttributeError "неизвестный атрибут: _destroy" для вложенных записей - PullRequest
0 голосов
/ 09 марта 2012

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

Нет ничего плохого, что я вижу. В моей модели я говорю

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 %>

1 Ответ

1 голос
/ 09 марта 2012

Вы должны создавать вложенные формы и формы с помощниками рельсов, не делайте это своими руками.Так что я думаю, что здесь твоя ошибка.

Попробуйте:

<%= form_for @apple_crate do |f| %>
  <%= f.fields_for :apples 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 %>

что-то вроде этого, не проверял, правильно ли это, но идея должна быть достаточно ясной

...