2009-03-13 14 views
8

me gustaría encontrar las Asociaciones del de una clase ActiveRecord en tiempo de ejecución ...¿Encuentra las asociaciones para una clase ActiveRecord en tiempo de ejecución?

Supongamos que tengo el siguiente:

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 

¿Cómo puedo saber en tiempo de ejecución que la persona "tiene muchas sillas" y bolígrafos, y viceversa? Estoy buscando un método que devuelva una matriz de cadenas (si tal método existe). es decir,

Person.has_many_assocations 

volvería:

["chairs", "pens"] 

y

Pen.belongs_to_associations 

volvería:

["person"] 

me estoy perdiendo un método como éste, que existe ??

Gracias por su ayuda.

Respuesta

25

Creo que la clase ActiveRecord::Reflection es lo que estás buscando. De la documentación:

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

Suena como una cosa bastante tonta para hacer el tiempo de ejecución. ¿Qué estás tratando de lograr exactamente? Supongo que hay una solución simple y más comúnmente utilizada para cualquiera que sea su problema.

Si tuviera que hacerlo, usaría TheModel.read_inheritable_attribute(:reflections).

+1

Uhhh ... piense en la tarea de Rake. Uno que necesita saber las asociaciones. –

+0

Los modelos mismos conocen las asociaciones. Así que todavía no te estoy siguiendo;) –

Cuestiones relacionadas