我有一些功能,我在每一個單一的模型中使用,我想把它們放在類似ActiveRecord::Base
所以我不必在我所有的模型中命名相同的功能。模型中是否有與application_helper或application_controller類似的東西?
我甚至不確定這樣的事情是否符合最佳實踐。也許一些Rails專業人員可以讓我看到更好的東西。
我有一些功能,我在每一個單一的模型中使用,我想把它們放在類似ActiveRecord::Base
所以我不必在我所有的模型中命名相同的功能。模型中是否有與application_helper或application_controller類似的東西?
我甚至不確定這樣的事情是否符合最佳實踐。也許一些Rails專業人員可以讓我看到更好的東西。
請記住,您仍然可以在Rails中使用標準的面向對象的實踐。創建一個擴展ActiveRecord::Base
所有常用功能的類,然後爲每個真實的ActiveRecord模型擴展該類。
編寫一個包含所需方法的模塊,並根據需要編寫include MyModule
。
你當然可以做@derekerdmann建議,併爲你的模型創建一個抽象基類:
class MyBaseModel < ActiveRecord::Base
abstract_class = true
def my_method(*args)
#code goes here
end
end
class MyModel < MyBaseModel
end
只是不要忘了abstract_class = true
線或單表繼承假設。個人而言,我更喜歡mixin方法,因爲如果您的模型在通用功能上有分歧,您可以根據需要將常用功能分組爲單獨的模塊和include
。
感謝您的輸入。我如何使用mixin方法? – imjp 2012-01-07 05:02:12
這裏有一個相當不錯的基本教程:http://juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/ 如果你是Google'ruby mixins',你可以找到更多。 – 2012-01-07 05:29:06
良好的面向對象設計將只會繼承,如果類有一個「是」的關係。對於Ruby,我建議創建一個模塊並使用'include'。 – 2012-01-07 04:36:49
爲什麼不創建一個顯示此答案的答案?我不知道如何在模型中使用include。 – imjp 2012-01-07 05:00:25