ActiveRecord模型 - 添加自定义方法

时间:2009-06-12 14:26:12

标签: ruby-on-rails ruby activerecord

我有10个模型,其中3个需要一些额外的自定义方法,恰好是:

has_staged_version?
apply_staged_version
discard_staged_version

我想一次定义这些方法。

我可以创建一个ActiveRecord的自定义子类:Base,在那里定义方法,让我的3个模型继承它。但是有更多的“Ruby / Rails”方法来实现这个目标吗?

干杯

3 个答案:

答案 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)

你的课程做什么?是否使用子类或模块的选择更多的是基于类本身 的语义问题。