2012-07-03 67 views
0

我有一個模塊,其目的是作用於任何給定的ActiveRecord實例。Ruby:調用模塊中的類方法

對於參數的緣故,假設這個方法將字符串"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

你試過'Foo.all'? –

+0

@HunterMcMillen我不能直接引用類名,因爲我不知道提前知道哪些類將使用它。 – varatis

回答

3

啊..發現後差不多吧,我問的解決方案......

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

0

您可以從一個實例拉一類的名稱,然後constantize它。

例如,給定一個類Thing

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

謝謝男爵。不幸的是,剛剛找到答案;)。另外,你不需要調用't.class.name ...''你可以簡化事物並調用't.class' – varatis

+0

這絕對是一種更簡單的方法,用於找到@varatis發佈的更簡單的解決方案。 – BaronVonBraun