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

そのうちの 1 つに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 に答える