Подтвердить что ты не робот

Принудительное обращение к обратным вызовам

Как можно обеспечить соблюдение порядка обратных вызовов? Например, как вы гарантируете, что Step 1 произойдет до Step 2:

after_save do
  logger.info "Step 1"
end

after_save do
  logger.info "Step 2"
end

Мой фактический пример относится к использованию сторонних драгоценных камней и обеспечению их завершения (они работают над обратными вызовами) перед моими обратными вызовами. Я должен использовать один и тот же обратный вызов (т.е. Не может использовать комбинацию before и after).

Спасибо!

4b9b3361

Ответ 1

Если вы используете обратные вызовы на уровне класса, они вызываются в том порядке, в котором они определены.

class Foo < ActiveRecord::Base

  after_save :step1
  after_save :step2

private

  def step1
    # stuff
  end

  def step2
    # stuff
  end
end

Для стороннего драгоценного камня это зависит от того, как вы взаимодействуете с камнем, но вероятность того, что они будут вызваны первыми, потому что они были загружены первыми.

Я бы не рекомендовал стиль def after_save вообще, особенно при работе с сторонним камнем.