Есть ли способ составить список всех принадлежащих ассоциаций? - PullRequest
35 голосов
/ 04 декабря 2011

Мне нужно составить список всех ассоциаций принадлежащих в модельном объекте и просмотреть их.Есть ли способ сделать это?

Ответы [ 3 ]

38 голосов
/ 03 января 2013

Вы можете использовать метод refle_on_all_associations из Reflection Например:

Thing.reflect_on_all_associations(:belongs_to)
33 голосов
/ 04 декабря 2011

Вы можете использовать хеш класса 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) }
19 голосов
/ 08 октября 2012
Thing.reflections.collect{|a, b| b.class_name if b.macro==:belongs_to}.compact 
#=> ["Foo", "Bar"]

конечно, вы можете передать: has_many или любые другие ассоциации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...