2009-12-08 59 views
1

我有幾個共享has_many關聯,命名範圍和驗證的模型。乾燥我的導軌模型

乾燥這些模型的最佳方法是什麼,以便它們可以共享相同的代碼?

創建一個父類,並讓這些模型從那裏繼承,或者我會更好地創建一個模塊?

這類型的代碼我期待乾涸:

has_many :comments, :as => :commentable 

has_permalink :title 

validates_presence_of :title 

has_attached_file :image 

我已經想通,我可以使用這個模塊來處理has_many關聯,但是當我嘗試類似的東西has_permalink或has_attached_file然後事情分解。

def self.included(klass) 
    klass.has_many :comments, :as => :commentable 
end 
+0

我已經成功地使用了繼承。但是,如果你能展示一些例子,它可能會有用嗎? – nathanvda 2009-12-08 15:11:17

回答

3

你應該使用繼承只有在模型的某些父類的true subtypes,而不是共享代碼的簡便方法。與一些語言不同,Ruby具有後者的模塊機制。

+0

謝謝約翰。這聽起來像一個模塊是要走的路。 – KJF 2009-12-08 16:29:33

3

在rails繼承意味着共享數據庫結構,不僅僅是方便。所以就像約翰說的那樣,當他們非常相似時,你真的只想做到這一點,以至於他們可以共享同一張桌子,並在這裏和那裏附加一些額外的字段。

如果你不是在尋找單表繼承,那麼在一個模塊中混合肯定是一個很好的方式去,它是非常容易的。 :)

+0

謝謝,我已經嘗試過模塊路由,並且幹掉了has_many關聯已經取得了一些成功,但是如果我嘗試以相同的方式幹掉其他代碼,它會崩潰。 – KJF 2009-12-08 15:35:14