use*_*003 4 inheritance activerecord ruby-on-rails
假设我想定义一些可以在我所有ActiveRecord模型中使用的方法和助手.
一些研究告诉我有两种一般选择
定义一个模块
module MyModule
def foo
# ...
end
end
Run Code Online (Sandbox Code Playgroud)
在需要时将其包含在模型中
class User < ActiveRecord::Base
include MyModule
before_save :foo
end
Run Code Online (Sandbox Code Playgroud)
定义基类
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
Run Code Online (Sandbox Code Playgroud)
让所有模型继承自它
class User < BaseModel
include MyModule
before_save :foo
end
Run Code Online (Sandbox Code Playgroud)
每个人的利弊是什么 - 以一种方式做到这一点有什么特别的优势吗?有没有更多的人认为是"Rails方式"?
谢谢!