6

这有什么问题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 对象确实被保存了。返回 true 并没有什么不同......

关于 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/

4

1 回答 1

3

我相信您需要为您的 has_many 定义设置 :autosave => true 选项。

如前所述,这里:

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

“如果为true,则在保存父对象时始终保存关联对象或如果标记为销毁则销毁它们。如果为false,则从不保存或销毁关联对象。默认情况下,仅保存新记录的关联对象。”

于 2012-04-12T00:39:02.800 回答