Rails& ActiveRecord:将方法附加到从ActiveRecord :: Base继承的模型

时间:2012-03-31 11:24:18

标签: ruby-on-rails ruby activerecord

我有一个标准的ActiveRecord模型,其中包含以下内容:

class MyModel < ActiveRecord::Base
  custom_method :first_field, :second_field
end

目前,该custom_method被发送到ActiveRecord :: Base的模块选中。该功能基本上可以工作,但当然,它将自己附加到每个模型类,而不仅仅是MyModel。因此,如果我在同一个动作中有MyModel和MyOtherModel,它将假设MyOtherModel具有custom_method:first_field,:second_field。

所以,我的问题是:如何将一个方法(例如:def custom_method(* args))附加到从ActiveRecord :: Base继承的每个类,而不是将它附加到ActiveRecord ::基地本身?

任何想法都赞赏。

===

修改

custom_method目前通过以下方式附加到ActiveRecord :: Base:

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)

1 个答案:

答案 0 :(得分:2)

你知道后代吗?

ActiveRecord::Base.descendants

在调用之前,您必须确保触摸模型。

请参阅此处的精彩讨论:

Is there a way to get a collection of all the Models in your Rails app?

我同意上面的评论员,您可能需要考虑将您的方法添加到元类,中间类或模块mixin。