Ruby on rails 铁路及;ActiveRecord:将方法附加到从ActiveRecord::Base继承的模型

Ruby on rails 铁路及;ActiveRecord:将方法附加到从ActiveRecord::Base继承的模型,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个标准的ActiveRecord模型,包括: class MyModel < ActiveRecord::Base custom_method :first_field, :second_field end module MyCustomModule def self.included(base) base.extend(self) end def custom_method(*args) # Zippity doo dah - code goes

我有一个标准的ActiveRecord模型,包括:

class MyModel < ActiveRecord::Base
  custom_method :first_field, :second_field
end
module MyCustomModule
  def self.included(base)
    base.extend(self)
  end

  def custom_method(*args)
    # Zippity doo dah - code goes here
  end
end

ActiveRecord::Base.send(:include, MyCustomModule)

你知道关于后代的事吗

ActiveRecord::Base.descendants
您必须确保在呼叫之前触摸模型

请参见此处的精彩讨论:


<>我同意上面的注释,您可能想考虑将方法添加到元类、中介类或模块混合。p> 听起来关键是自定义方法做什么?打开ActionView::Helpers::FormHelper-->字段,并将自定义方法(*args)中的参数附加到任何表单的顶部(包装在h1标记中)…实际上,这是一个无用的gem,但我正在努力寻找我的脚:gem创建。为什么不定义一个继承自ActiveRecord::Base的类,并让您的模型继承自该类?或者这是您想要完全隐藏的东西,以便其他开发人员可以继续从ActiveRecord::Base继承并获得功能,而无需显式请求它?我想看看您包含的模块以及如何附加该方法。您已经误入了元编程领域,我认为您所做的是将方法附加到基类,您应该将方法附加到元类。检查一下:如果您要从custom_方法内部调用define_方法,该方法只会将方法添加到模型中,那么很好-我怀疑这正是我所想的。(但在我尝试之前必须用完——几个小时后回来)