Recherchez les associations pour une classe ActiveRecord au moment de l'exécution?
-
22-07-2019 - |
Question
J'aimerais trouver les assocations d'une classe ActiveRecord à l'exécution ...
Supposons que j'ai les éléments suivants:
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
Comment puis-je savoir au moment de l’exécution que cette personne "en a plusieurs"? Chaises et Stylos, et vice versa? Je cherche une méthode qui retournerait un tableau de chaînes (si une telle méthode existe). c'est-à-dire
Person.has_many_assocations
renverrait:
["chairs", "pens"]
et
Pen.belongs_to_associations
renverrait:
["person"]
Me manque-t-il d'une méthode comme celle-ci qui existe?
Merci pour votre aide.
La solution
Je pense que la classe ActiveRecord :: Reflection est peut-être ce que vous cherchez. De la documentation:
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
Autres conseils
Cela ressemble à une chose assez idiote de faire de la course. Qu'est-ce que vous essayez exactement de réaliser? Je suppose qu’il existe une solution simple et plus couramment utilisée à votre problème.
S'il le fallait, j'utiliserais TheModel.read_inheritable_attribute (: reflections)
.