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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top