2014-09-29 88 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

相關問題