2012-02-05 60 views
1

在我的應用程序中,我有一個應包含模塊的模型。該模型有一個名爲'format'的屬性,它決定了哪個模塊應該包含在內。例如,如果format == 0,那麼型號應該是include SingleElimination,而如果是format == 1,那麼型號應該是include DoubleElmination。做這個的最好方式是什麼?動態地在ActiveRecord中包含一個模塊

回答

1
def include_format 
    case format 
    when 1 
    extend SingleElimination 
    when 2 
    extend DoubleElmination 
    end 
end 

after_initialize :include_format 
+0

我有一個問題:爲什麼擴展使用over包括? – Max 2012-02-05 17:53:35

+0

@Max我使用'extend'是因爲'include'沒有在方法體的上下文中定義。所以接受的答案會引發一個'MethodNotDefined'。此外,在這個答案中描述的「包含」就是在類體中調用時以這種方式工作的。然而,這是一個不同的上下文,然後在'extend'將它添加到它應該去的方法體中。 – 2012-02-05 19:38:00

+0

我明白了,謝謝你的見解。延伸時我並不知道這種區別。但是,您的實施不正確。您無法在after_initialize過濾器中調用格式。我得到的參數錯誤太少。爲了糾正這個問題,我不得不使用lambda。我編輯了什麼爲我工作。 – Max 2012-02-05 19:54:51