2010-05-21 5 views

ответ

28

Вы должны использовать ActiveRecord reflections.

Тогда вы можете ввести что-то вроде этого:

A.reflect_on_all_associations.map { |assoc| assoc.name} 

который будет возвращать ваш массив

[:B, :C] 
+17

Чтобы получить только 'has_many' ассоциации, его можно передать параметр: 'A.reflect_on_all_associations (: has_many) .map (&: name) # => [: B,: C]' – Voyta

+0

есть способ отразить (то есть траверс) по переменной * экземпляра * , где ассоциации были загружены? –

+0

Марк Ричман: self.class.reflect_on_all_associations ... – stebooks

2

Для примера можно попробовать:

aux=Array.new 
Page.reflections.each { |key, value| aux << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) } 

Привет Pioz, Хорошего дня!

0

Найдено решения:

def self.get_macros(macro) 
    res = Array.new 
    self.reflections.each do |k,v| 
    res << k if v.macro == macro.to_sym 
    end 
    return res 
end 
+0

@ ответ nathanvda является гораздо более простой ... – tokland

Смежные вопросы