我正在尝试在方法中手动运行所有回调方法。例如,我想在我的模型中运行所有“before_destroy”方法。
有没有办法手动触发?例如,像:
def some_method
# ...
trigger(:before_destroy)
end
然后将运行我用“before_destroy:....”
声明的所有方法有什么想法吗?
答案 0 :(得分:10)
如果您乐意同时执行以下操作:在挂钩之前和之后,您可以尝试run_callbacks
。
来自the docs:
run_callbacks(kind, &block)
运行给定事件的回调。
按照它们设置的顺序调用前后回调,产生块(如果给定一个),然后以相反的顺序运行after回调。
如果回调链暂停,则返回false。否则返回块的结果,如果没有给出块,则返回true。
run_callbacks :save do
save
end
答案 1 :(得分:-3)
class Foo < ActiveRecord::Base
def destroy_method_1
end
def destroy_method_2
end
before_destroy :destroy_method_1, :destroy_method_2
DESTROY_METHODS = [:destroy_method_1, :destroy_method_2]
def some_method
DESTROY_METHODS.each {|m| send(m) }
end
end