2012-07-15 116 views
1

我不是在標題中正確表達問題,而是繼承我想要做的事情。遠程模型回調 - 導軌3?

我有一個方法,像這樣:

class User < ActiveRecord::Base 
    def myMethod(abc, xyz) 
    #do stuff 
    end 
end 

我想在我的應用程序5個不同的模型來調用它們after_create回調此功能。

在這些模型中的每一個模型中調用此函數似乎都非常反DRY。

在這個模型(上面)中是否有一種方法持有該方法 - 遠程使用其他模型的回調?

或者任何人都可以提出一種不同的方式,我應該接近這樣的事情嗎?

回答

3

這就是我會做什麼:

創建一個模塊:

module MyCallbacks 

    extend ActiveSupport::Concern 

    included do 
     after_create :my_method 
    end 

    def my_method 
     #do stuff 
    end 

end 

然後,你只需要包括該模塊在您選擇的車型:

class MyModel < ActiveRecord::Base 
    include MyCallbacks 
end 
+0

但是,包括在我選擇的模型中 - 它並不真正讓我「管理」哪些模型被附加到。即難道我真的不想指定所有的模型在一個地方獲得回調,而不是5個獨立的地方嗎? – Elliot 2012-07-15 03:57:48

+0

我不認爲這是一個問題,必須將模塊包含在模型中。至少在每個模型中都明確表示它們具有這些回調函數。 – Robin 2012-07-15 04:09:02

+1

如果你真的想要,我想你可以有一個初始化器,將模塊包含在你的模型中:'YourModel.class_eval {include MyCallbacks}'(爲你的每個模型重複) – Robin 2012-07-15 04:12:32