2014-09-29 78 views
2

我试图在一个方法内手动运行所有的回调方法。例如,我想在我的模型中运行所有“before_destroy”方法。你可以在Ruby on Rails中手动“触发”回调吗?

有没有办法手动触发这个?例如,像:

def some_method 
    # ... 
    trigger(:before_destroy) 
end 

然后将运行了我与声明的所有方法“before_destroy:......”

任何想法?

回答

6

如果你感到快乐同时运行:前:挂机后,你可以尝试run_callbacks。 从the docs

run_callbacks(kind, &block) 

运行的特定事件的回调。

以它们被设置的顺序调用before和around回调,产生块(如果给定一个),然后以相反顺序运行after回调。

如果回调链暂停,则返回false。否则返回块的结果,如果没有给出块,则返回true。

run_callbacks :save do 
    save 
end 
+0

这很好,谢谢! – sjsc 2014-09-30 00:01:43

-2
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 
+2

lol。这是我见过的更糟糕的代码:(sry mate – 2017-04-04 11:22:25

+0

@huanson不必要的意思和无益的帮助 – 2017-11-25 19:07:33

相关问题