2010-05-21 14 views

risposta

28

Si deve usare ActiveRecord reflections.

Quindi è possibile digitare qualcosa di simile:

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

che restituirà l'array

[:B, :C] 
+17

Per ottenere solo 'associazioni has_many', è è possibile passare un parametro: 'A.reflect_on_all_associations (: has_many) .map (&: nome) # => [: B, C]' – Voyta

+0

c'è un modo per riflettere (ad esempio traverse) su un'istanza * * variabile , dove le associazioni sono stati caricati con entusiasmo? –

+0

Mark Richman: self.class.reflect_on_all_associations ... – stebooks

2

Per esempio si potrebbe provare:

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

Hi Pioz, Have a Nice Day!

0

trovato le soluzioni:

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

@ risposta di nathanvda è molto più semplice ... – tokland

Problemi correlati