我有几个共享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 :(得分:3)
只有当模型是某种父类型的true subtypes时,才应该使用继承,而不是作为共享代码的便捷方式。与某些语言不同,Ruby具有后者的模块机制。
答案 1 :(得分:3)
在rails继承中意味着共享数据库结构,而不仅仅是方便。就像约翰所说的那样,你真的只想在他们如此相似的情况下这样做,他们可以分享同一张桌子,并在这里和那里添加几个额外的字段。
如果你不是在寻找单表继承,那么在模块中混合肯定是一个很好的方法,它非常容易。 :)