Rails: Как мне запускать обратные вызовы моих связанных объектов перед обратными вызовами родителя? - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть модель 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 Ответ

1 голос
/ 27 апреля 2011

Чтобы проверить, действительны ли они

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