0

我有两个几乎相同的模型。我想创建一个或多个 mixin,以便我可以在这些模型之间共享行为。这是一个示例模型,其中包括我能想到的所有变体:

class Model < ActiveRecord::Base
  STATUS_OPTIONS = ['new', 'approved', 'rejected', 'deleted']
  attr_accessible :status
  validates_inclusion_of :status, :in => STATUS_OPTIONS

  def self.custom_finder(status)
    find_by_status(status)
  end

  def simple_instance_method
    'easy'
  end
end

我了解从 Ruby 模块中包含实例方法的一些基础知识,但是当涉及到更高级的东西(如 ActiveRecord 类方法、常量等)时,我感到很困惑。

module ModelClassMethods
  def custom_finder(status)
    find_by_status(status)
  end
end

module ModelInstanceMethods
  def simple_instance_method
    'easy'
  end
end

class Model < ActiveRecord::Base
  STATUS_OPTIONS = ['new', 'approved', 'rejected', 'deleted']
  attr_accessible :status
  validates_inclusion_of :status, :in => STATUS_OPTIONS

  extend ModelClassMethods
  include ModelInstanceMethods
end

现在如何提取常量和验证方法?

4

1 回答 1

0

常量包含在内,方法includevalidates也是实例方法,所以......

module ModelInstanceMethods
  STATUS_OPTIONS = ['new', 'approved', 'rejected', 'deleted']

  def simple_instance_method
    'easy'
  end
end

到这里你就没事了。我认为答案是ActiveSupport::Concern

于 2013-10-21T18:26:31.393 回答