¿Encuentra las asociaciones para una clase ActiveRecord en tiempo de ejecución?
-
22-07-2019 - |
Pregunta
Me gustaría encontrar las asociaciones de una clase ActiveRecord en tiempo de ejecución ...
Supongamos que tengo lo 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 averiguar en tiempo de ejecución que la Persona "tiene muchos" Sillas y bolígrafos, y viceversa? Estoy buscando un método que devuelva una matriz de cadenas (si existe tal método). es decir
Person.has_many_assocations
devolvería:
["chairs", "pens"]
y
Pen.belongs_to_associations
devolvería:
["person"]
¿Me estoy perdiendo un método como este que existe?
Gracias por tu ayuda.
Solución
Creo que la clase ActiveRecord :: Reflection puede ser lo que usted 'que estas 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
Otros consejos
Suena como algo bastante tonto para hacer en tiempo de ejecución. ¿Qué es exactamente lo que estás tratando de lograr? 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 (: reflexiones)
.