54 votes

Comment obtenir des associations activerecord par réflexion

Pour les colonnes normales, vous pouvez les obtenir via la méthode de classe columns . Toutefois, les associations peuvent porter un nom tout à fait différent si l'option foreign_key est définie dans la méthode de relation. Par exemple, étant donné

 class Post
  has_many :comments, :foreign_key => :message_id # this is a contrived example
end
 

si je le faisais Post.column_names je pourrais obtenir à message_id , mais y a-t-il un moyen d'obtenir comments ?

87voto

mikej Points 30224

Model.reflections donne des informations sur les associations d'un modèle. C'est un Hash saisi sur le nom de l'association. par exemple

 Post.reflections.keys # => [:comments]
 

Voici un exemple d’information à laquelle il peut accéder:

 Post.reflections[:comments].table_name # => "comments"
Post.reflections[:comments].macro # => :has_many
Post.reflections[:comments].primary_key_name # => "message_id"
 

21voto

MCB Points 494

Pour les futurs Googlers dans Rails 4, la réponse serait désormais la suivante:

 Post.reflections[:comments].foreign_key # => "message_id"
 

Extrait de: http://stackoverflow.com/a/15364743/2167965

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X