2009-12-08 27 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