我有一个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
有更好的方法来处理这个吗?
检查它们是否有效
def do_something
line_items.all?(&:valid?)
# Then do whatever I need here - I've forced the callback order
end