我有一个模块,其目的是对任何给定的ActiveRecord
实例采取行动。
为了论证,让我们说如果字符串"match"
与某个属性相匹配,则该方法会放置字符module Foo
def check_against_other_instances
self.all.each do |instance|
if self.respond_to? :color && self.color == instance.color
puts "match"
end
end
end
end
。
self.all
但是,我不能在这里简单地调用self
,因为all
是一个实例。如何从这里调用类方法{{1}}?
答案 0 :(得分:3)
啊......在我问...之后几乎找到了解决方案......
self.class.all.each do |instance|
...
答案 1 :(得分:0)
如果你想扩展rails类的行为,那么你最好使用ActiveSupport :: Concern!
答案 2 :(得分:0)
您可以从实例中提取类的名称,然后constantize。
例如,给定一个班级Thing
:
t = Thing.new
t.class.name
# => "Thing"
t.class.name.constantize
# => Thing