2011-10-10 39 views
0

我有兩個Rails項目,我們稱它們爲Foo和Bar。他們共享相同的模型。模型生活在Foo和Bar鏈接到這些文件。保證在Rails中加載訂單

在Foo的車型之一的特定方法的行爲需要在酒吧是不同的:

項目foo中的模型/ model_a.rb:

class ModelA 
    def method_a 
    puts "default behavior here" 
    end 
end 

某處在項目欄:

class ModelA 
    def method_a 
    puts "special behavior here" 
    end 
end 

以便下面這行代碼:

x = model_a.method_a 

在一個項目中執行的方式與另一個項目中的執行方式不同,如果沒有Bar必須弄亂Foo的模型。如果Foo的模型只是一個寶石,也會出現類似的情況,儘管加載順序問題會有所不同。

我的問題是:這段代碼片段應該在項目欄中的位置?我如何保證Bar的mix-in最後加載,以便在項目Bar中的運行時執行正確的函數?

回答

2

繼承?這就是你所描述的。

如果這是Active Record,那麼你可以在Bar應用程序中強制使用表名,然後在那裏使用子類。

另外,但我認爲這是一個破解。創建一個名爲override_model_a

require 'modelA' 
class ModelA 
    # then do your initializing, or include your module here 
end 

Ruby的確使用初始值設定「最後一個贏」,所以如果你需要原來的類,然後在初始化覆蓋它會做你想要什麼。