Encontrar as associações para uma classe ActiveRecord em tempo de execução?
-
22-07-2019 - |
Pergunta
Eu gostaria de encontrar as assocations de uma classe ActiveRecord em tempo de execução ...
Vamos supor que eu tenho o seguinte:
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
Como posso saber em tempo de execução que Pessoa "tem muitos" Cadeiras e canetas, e vice-versa? Estou à procura de um método que iria retornar um array de strings (caso exista uma). ou seja
Person.has_many_assocations
voltaria:
["chairs", "pens"]
e
Pen.belongs_to_associations
voltaria:
["person"]
Am I faltando um método como este que existe ??
Obrigado por sua ajuda.
Solução
Eu acho que a ActiveRecord :: Reflection classe pode ser o que você 'está procurando. A partir da documentação:
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
Outras dicas
soa como uma coisa muito bobo para fazer run-time. O que exatamente você está tentando alcançar? Eu suponho que há uma solução simples e mais comumente usado para qualquer que seja o seu problema.
Se eu tivesse que, eu usaria TheModel.read_inheritable_attribute(:reflections)
.