强制执行订单到Rails回调

Kev*_*tre 12 ruby-on-rails

如何强制执行回调订单?例如,您如何确保在此Step 1之前发生Step 2:

after_save do
  logger.info "Step 1"
end

after_save do
  logger.info "Step 2"
end
Run Code Online (Sandbox Code Playgroud)

我的实际例子涉及使用第三方宝石并确保它们在我自己的回调之前完成(它们在回调上工作).我必须使用相同的回调(即不能使用beforeafter组合).

谢谢!

wup*_*tah 17

如果使用类级回调,则按照定义的顺序调用它们.

class Foo < ActiveRecord::Base

  after_save :step1
  after_save :step2

private

  def step1
    # stuff
  end

  def step2
    # stuff
  end
end
Run Code Online (Sandbox Code Playgroud)

对于第三方gem,它取决于你如何与gem进行交互,但是它们首先会被调用,因为它们首先被加载.

我根本不建议使用这种def after_save风格,特别是在处理第三方宝石时.