您可以定義類似下面的代碼來在您的模型中創建自定義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
我重新打開ActiveRecord :: Base類而不是繼承,因爲它在Ruby中更常見的是繼承。
我喜歡在我的模塊中使用名爲ClassMethods和InstanceMethods的子模塊,並使用self.included方法將它們添加到基類中。所以你可以使用'include MyModule'而不必知道你是否添加實例或類方法。
我希望我能幫助你。
這真的非常有用 - 非常感謝。 – user1129657 2012-04-20 06:48:34