烘干我的导轨型号

时间:2009-12-08 15:02:57

标签: ruby-on-rails dry

我有几个共享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

2 个答案:

答案 0 :(得分:3)

只有当模型是某种父类型的true subtypes时,才应该使用继承,而不是作为共享代码的便捷方式。与某些语言不同,Ruby具有后者的模块机制。

答案 1 :(得分:3)

在rails继承中意味着共享数据库结构,而不仅仅是方便。就像约翰所说的那样,你真的只想在他们如此相似的情况下这样做,他们可以分享同一张桌子,并在这里和那里添加几个额外的字段。

如果你不是在寻找单表继承,那么在模块中混合肯定是一个很好的方法,它非常容易。 :)