我有10个模型,其中3个需要一些额外的自定义方法,恰好是:
has_staged_version?
apply_staged_version
discard_staged_version
我想一次定义这些方法。
我可以创建一个ActiveRecord的自定义子类:Base,在那里定义方法,让我的3个模型继承它。但是有更多的“Ruby / Rails”方法来实现这个目标吗?
干杯
答案 0 :(得分:4)
将模块用作mixin。
请参阅http://www.juixe.com/techknow/index.php/2006/06/15/mixins-in-ruby/
e.g。
/lib
中的
module StagedVersionStuff
def has_staged_version?
end
def apply_staged_version
end
def discard_staged_version
end
end
然后在你希望拥有这些方法的模型中
include StagedVersionStuff
在Class
声明之后
答案 1 :(得分:1)
您可以创建一个模块并让您的课程包括它:
module StagedVersionMethods
def has_staged_version?
end
def apply_staged_version
end
def discard_staged_version
end
end
Model.send :include, StagedVersionMethods
答案 2 :(得分:0)
你的课程做什么?是否使用子类或模块的选择更多的是基于类本身 的语义问题。