我在两个回调before_destroy
和before_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
我需要跳过一个条件。
先谢谢。
答案 0 :(得分:4)
我们可以找到此交易属于哪个行为
请参阅此方法transaction_include_action?
但是,您找不到哪个回调,例如after_create
或before_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