以下のコードのようなものを定義して、モデルにカスタムDSLを作成できます。
module SpecialAttributes
module ClassMethods
def attr_special(*attrs)
class_attribute :special_attributes
self.special_attributes = attrs
end
def special_attributes
self.special_attributes
end
end
module InstanceMethods
# some code here
end
def self.included(base)
base.extend ClassMethods
base.send :include, InstanceMethods
end
end
class ActiveRecord::Base
include SpecialAttributes
end
Rubyでは継承よりも一般的であるため、継承を使用する代わりにActiveRecord::Baseクラスを再度開きます。
モジュールでClassMethodsとInstanceMethodsというサブモジュールを使用し、self.includedメソッドを使用してそれらを基本クラスに追加するのが好きです。したがって、インスタンスメソッドとクラスメソッドのどちらを追加するかを知らなくても、「includeMyModule」を使用できます。
私はあなたを助けることができると思います。