Ruby:调用模块中的类方法

时间:2012-07-03 18:14:31

标签: ruby-on-rails ruby activerecord

我有一个模块,其目的是对任何给定的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}}?

3 个答案:

答案 0 :(得分:3)

啊......在我问...之​​后几乎找到了解决方案......

self.class.all.each do |instance| ...

答案 1 :(得分:0)

如果你想扩展rails类的行为,那么你最好使用ActiveSupport :: Concern!

http://apidock.com/rails/ActiveSupport/Concern

答案 2 :(得分:0)

您可以从实例中提取类的名称,然后constantize

例如,给定一个班级Thing

t = Thing.new
t.class.name
  # => "Thing"
t.class.name.constantize
  # => Thing