2012-04-14 41 views
2

我在Ruby on Rails中有多個需要共享類方法的Active Record數據模型。我可以輕鬆地在所有類中聲明方法,但這違背了DRY原則。如何在Rails中的多個數據模型之間共享類方法?

我已經看過聲明一個模塊並使用'include'來混入代碼,但似乎只適用於實例方法,而不是類方法。

在Ruby/Rails中執行此操作的首選方法是什麼? (我試圖創建一個基本的ActiveRecord類並從中繼承,但ActiveRecord嚇壞了)。

回答

3

的ClassMethods成語是一個模塊,同時提供類和實例方法的常用方法:http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/

,如果你創建一個抽象基類的ActiveRecord不應驚慌,只要你在這個類調用self.abstract_class = truehttp://api.rubyonrails.org/classes/ActiveRecord/Inheritance/ClassMethods.html

+0

Bingo中聲明你的表名! self.abstract_class = true是我所缺少的。謝謝。 – 2012-04-14 15:42:08

2

使用extend而不是include與模塊。這將混合使用類方法而不是實例方法。

或者您絕對可以從ActiveRecord::Base繼承您的基本模型,並從此基礎繼承所有正常模型。 ActiveRecord不應該嚇倒。

+0

我無法繼承工作。例如。類Foo 2012-04-14 15:37:02

+0

我認爲這是你需要的答案。這與ActiveRecord沒什麼關係,但與Ruby的架子相關。嘗試爲常用方法創建Ruby模塊並從它們中「擴展」。 – fguillen 2012-04-14 16:18:39

+0

Leonard,你需要在類 – cpuguy83 2012-04-15 02:15:17

相關問題