Обеспечить выполнение заказа на обратные вызовы Rails - PullRequest
12 голосов
/ 09 декабря 2010

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

after_save do
  logger.info "Step 1"
end

after_save do
  logger.info "Step 2"
end

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

Спасибо!

1 Ответ

17 голосов
/ 09 декабря 2010

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

class Foo < ActiveRecord::Base

  after_save :step1
  after_save :step2

private

  def step1
    # stuff
  end

  def step2
    # stuff
  end
end

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...