2013-07-02 27 views
0

我有一個Identity模型,其中有很多types(說,student,teacher)。每種類型都有許多在不同模塊中定義的獨特方法,以及許多共享方法。包含模塊取決於即時類型

我想根據即時類型包含某些模塊以避免命名衝突。例如:

class Identity < ActiveRecord::Base 
if instant.type =='student' 
    include Student 
if instant.type == 'teacher' 
    include Teacher 
end 
end 

我應該怎麼做?

+2

爲什麼不只是從身份繼承學生和老師班? –

+0

我同意伊萬,除非一個實體可以是一個老師和一個學生,你最好用STI - http://blog.thirst.co/post/14885390861/rails-single-table-inheritance – house9

+0

謝謝伊萬和house9。 STI是一個明智的選擇。不幸的是,我有一個很大的遺留代碼,如果轉換爲STI可能會中斷代碼(例如,我使用的組合鍵寶石可能會中斷索引)。 – AdamNYC

回答

1

你可以在初始化hook之後使用加載正確的模塊。

def after_initialize 
if self.type =='student' 
    extend Student 
else if self.type == 'teacher' 
    extend Teacher 
end 
end 

但是,您必須確保始終使用類型初始化對象以避免意外的結果。

+0

謝謝Vimsha。我試過你的解決方案,但它沒有奏效。它被測試了嗎? – AdamNYC

+0

進行了編輯。嘗試這個。我在我的一個項目中使用了這個。所以我相信它應該工作 – usha

+0

嗨Vimsha,就我而言,學生和老師是模塊而不是班級。我想知道它是否會起作用。 – AdamNYC