mark_for_destruction в before_save - PullRequest
       42

mark_for_destruction в before_save

4 голосов
/ 12 ноября 2011

Что не так с этим before_save-callback?

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 => true"? посмотреть здесь: http://weblogs.manas.com.ar/spalladino/2010/03/15/deleting-children-with-accepts_nested_attributes_for-in-rails/

1 Ответ

3 голосов
/ 12 апреля 2012

Полагаю, вам нужно установить опцию: autosave => true для определения has_many.

Как указано здесь:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

"Если true, всегда сохраняйте связанные объекты или уничтожайте их, если помечены для уничтожения, при сохранении родительского объекта. Если false, никогда не сохраняйте и не уничтожайте связанные объекты. По умолчанию сохраняются только связанные объекты, которые являются новыми записями."

...