2011-12-03 9 views

答えて

30

これを行うには、クラスのreflectionsハッシュを使用できます。そこより簡単な方法でもよいが、これは動作しますがあります。

# say you have a class Thing 
class Thing < ActiveRecord::Base 
    belongs_to :foo 
    belongs_to :bar 
end 

# this would return a hash of all `belongs_to` reflections, in this case: 
# { :foo => (the Foo Reflection), :bar => (the Bar Reflection) } 
reflections = Thing.reflections.select do |association_name, reflection| 
    reflection.macro == :belongs_to 
end 

# And you could iterate over it, using the data in the reflection object, 
# or just the key. 
# 
# These should be equivalent: 
thing = Thing.first 
reflections.keys.map {|association_name| thing.send(association_name) } 
reflections.values.map {|reflection| thing.send(reflection.name) } 
もちろんの
16
Thing.reflections.collect{|a, b| b.class_name if b.macro==:belongs_to}.compact 
#=> ["Foo", "Bar"] 

は、あなたが渡すことができます:has_manyの、またはその他の団体あまりに

あなたは用反射 からreflect_on_all_associations方法を利用することができます
+0

ドープされたくそ!素敵な....! –

34

例:

Thing.reflect_on_all_associations(:belongs_to)