Rails:如何在父回调之前运行关联对象的回调?

时间:2011-04-27 10:52:10

标签: ruby-on-rails-3 activerecord callback activemodel

我有一个Invoice模型,has_many :line_items

两个模型都有before_validation个回调。发票的回调要求首先运行订单项的回调。但是,默认情况下,发票的回调会运行,然后运行每个订单项的回调。

是否有一种好方法可以确保首先验证订单项,然后确认发票?

目前,我正在玩这样的事情:

class Invoice < ActiveRecord::Base
  before_validation :do_something
  ...

private
  def do_something
    line_items.each { |line_item| line_item.run_callbacks(:validation) }
    # Then do whatever I need here - I've forced the callback order
  end
end

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

检查它们是否有效

def do_something
  line_items.all?(&:valid?)
  # Then do whatever I need here - I've forced the callback order
end