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.

¿Fue útil?

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) .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top