Что не так с этим before_save-callback
?mark_for_destruction in before_save
class Order < ActiveRecord::Base
has_many :line_items, :dependent => :destroy, :inverse_of => :order
accepts_nested_attributes_for :line_items
attr_accessible :line_items_attributes
before_save :mark_line_items_for_removal
def mark_line_items_for_removal
line_items.each do |line_item|
line_item.mark_for_destruction if line_item.quantity.to_f <= 0
end
end
end
Когда один из line_items
отмечены для уничтожения, не line_item
не будут сохранены. Однако родительский объект Order сохраняется. Возвращение правда не делает разницы ...
о mark_for_destruction: http://apidock.com/rails/v3.1.0/ActiveRecord/AutosaveAssociation/mark_for_destruction и почему, что вместо ": allow_destroy => правда"? см. здесь: http://weblogs.manas.com.ar/spalladino/2010/03/15/deleting-children-with-accepts_nested_attributes_for-in-rails/
Возможно, есть некоторые проблемы с 'if line_item.quantity.to_f <= 0'? Вы уверены, что это не всегда неверно? – WarHog
Нет, я проверил с помощью 'puts line_item.marked_for_destruction?' после этого line. Это дало ожидаемый результат. Но когда один из них был отмечен, ни один из них не был спасен ... – NovapaX
Вы когда-нибудь нашли ответ для этого? Я заметил, что маркировка дочернего элемента для уничтожения приведет к тому, что бот не будет сохранен, а следующий элемент (IE: -1,1,2 - сохранит только 2) – bmihelac