0

ほぼ同じモデルを 2 つ持っています。これらのモデル間で動作を共有できるように、1 つ以上の 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

定数が含まれてincludeおり、メソッドのファミリvalidatesもインスタンス メソッドなので...

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

  def simple_instance_method
    'easy'
  end
end

ここまではOKです。答えはActiveSupport::Concern

于 2013-10-21T18:26:31.393 に答える