假设我想定义一些可在我的ActiveRecord
模型中使用的方法和助手。
一些研究告诉我有两个一般选项
定义模块
module MyModule
def foo
# ...
end
end
在需要时将其包含在模型中
class User < ActiveRecord::Base
include MyModule
before_save :foo
end
定义基类
class BaseModel < ActiveRecord::Base
# Define as abstract so AR doesn't assume there's a table named `base_models`
self.abstract_class = true
def foo
# ...
end
end
让所有模型继承自
class User < BaseModel
include MyModule
before_save :foo
end
每种方法的优点/缺点是什么?以一种方式做到这一点有什么特别的优势吗?有没有更多的人认为是“Rails方式”?
谢谢!
答案 0 :(得分:6)
最好使用名为has
的类/模块之间的关系,而不是is
。
或者换句话说,最好使用Module
代替inheritance
。这是因为后面可能的更改,如果你以后要求有2种类型的类,那么你必须创建2 BaseClasses
,并让一些类从一个继承而另一个继承。< / p>
当您使用模块时,您只需包含模块,从而定义包含它的类的行为,即所谓的has
行为。
为了更好地掌握代码中的优点,不熟悉代码,学习模式,并阅读Clean Code