モデルオブジェクト内のすべてのbelongs_to関連付けをリストし、それらを反復処理する必要があります。これを行う方法はありますか?belongs_toの関連付けをすべてリストする方法はありますか?
29
A
答えて
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方法を利用することができます
34
例:
Thing.reflect_on_all_associations(:belongs_to)
ドープされたくそ!素敵な....! –