2009-03-13 6 views
8

Mi piacerebbe trovare le association di una classe ActiveRecord a runtime ...Trova le associazioni per una classe ActiveRecord in fase di esecuzione?

Supponiamo Ho il seguente:

class Person < ActiveRecord::Base 
    has_many :chairs 
    has_many :pens 
end 

class Chair < ActiveRecord::Base 
    belongs_to :person 
end 

class Pen < ActiveRecord::Base 
    belongs_to :person 
end 

Come faccio a sapere che in fase di esecuzione Persona "ha molti" Sedie e Penne e viceversa? Sto cercando un metodo che restituisca una serie di stringhe (se esiste un tale metodo). cioè

Person.has_many_assocations 

ritornerebbe:

["chairs", "pens"] 

e

Pen.belongs_to_associations 

ritornerebbe:

["person"] 

mi manca un metodo come questo che esiste ??

Grazie per il vostro aiuto.

risposta

25

Penso che la classe ActiveRecord::Reflection potrebbe essere quello che stai cercando. Dalla documentazione:

Account.reflect_on_all_associations    # returns an array of all associations 
    Account.reflect_on_all_associations(:has_many) # returns an array of all has_many associations 
0

Suona come una cosa piuttosto stupida da fare runtime. Cosa stai cercando di ottenere esattamente? Presumo che ci sia una soluzione semplice e più comunemente usata per qualunque sia il tuo problema.

Se dovessi, userei TheModel.read_inheritable_attribute(:reflections).

+1

Uhhh ... pensa al compito di Rake. Uno che ha bisogno di conoscere le associazioni. –

+0

I modelli stessi conoscono le associazioni. Quindi non ti seguo ancora;) –

Problemi correlati