我有一个标准的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)
答案 0 :(得分:2)
你知道后代吗?
ActiveRecord::Base.descendants
在调用之前,您必须确保触摸模型。
请参阅此处的精彩讨论:
Is there a way to get a collection of all the Models in your Rails app?
我同意上面的评论员,您可能需要考虑将您的方法添加到元类,中间类或模块mixin。