如何区分哪个回调运行rails

时间:2015-07-14 08:38:24

标签: ruby-on-rails callback

我在两个回调before_destroybefore_update中使用相同的方法。在方法内部,我如何检查哪个回调被称为此方法?

我的回调:

before_destroy :set_manager_to_true_of_any_trainee
before_update :set_manager_to_true_of_any_trainee

这是我的回调方法:

def set_manager_to_true_of_any_trainee
  if destroy_callback
     # code here
  else
     # code here
  end
end

我这样做是因为90%的代码对于回调都是相同的,但对于before_destroy我需要跳过一个条件。

先谢谢。

2 个答案:

答案 0 :(得分:4)

我们可以找到此交易属于哪个行为

请参阅此方法transaction_include_action?

但是,您找不到哪个回调,例如after_createbefore_create,但确保此交易属于create行动。

在您的情况下,可以按如下方式使用

if transaction_include_action?(:update)
...
else transaction_include_action?(:destroy)
...
end

注意: - 在Rails4中不推荐使用此方法。新方法引入了transaction_include_any_action?(actions),它接受​​一系列动作。见here

一切顺利!

答案 1 :(得分:1)

我建议你分开吗?

class YourModel

  before_destroy :on_destroy_set_manager_to_true_of_any_trainee
  before_update :on_update_set_manager_to_true_of_any_trainee

  def on_destroy_set_manager_to_true_of_any_trainee
    set_manager_to_true_of_any_trainee(true)
  end

  def on_update_set_manager_to_true_of_any_trainee
    set_manager_to_true_of_any_trainee
  end

  private

  def set_manager_to_true_of_any_trainee(destroying=false)
  end

end