2010-11-27 19 views
6

J'essaie de joindre deux tables et de renvoyer toutes les colonnes, pas seulement celles associées au modèle.Rails 3 Renvoyer toutes les colonnes à partir d'une jointure

J'ai quelque chose comme ça ressemble à ceci:

Comment.joins(:user).select("*") 

Le SQL a l'air bien, mais quand même, il renvoie uniquement les commentaires et aucune des informations de l'utilisateur associé. Comment puis-je récupérer * et pas seulement comments.*?

Répondre

7

Qu'en est-

comments = Comment.includes(:user).all 

Maintenant comments va être un tableau de sorte que vous aurez à parcourir pour voir tous les utilisateurs.

#won't work 
comments.user 

#should work 
comments[0].user 

comments.each do |comment| 
    puts comment.user.name #or whatever 
end 
+0

Vous ne parvenez toujours pas à afficher les informations sur l'utilisateur. Rendez-vous chez Mishka et aidez-moi avec ça;) – Dex

+0

Nice Davis reference. – rwilliams

+0

J'ai été debout trop longtemps;). Cela marche. Je voulais m'assurer que tout était chargé. – Dex

1

Comment.select ('*') comprend. (: L'utilisateur)

+0

droit - Je ne sais pas si vous étiez préoccupé par SQL ou tout simplement obtenir les données. Dans ce cas, vous récupérez à la fois les commentaires ET les utilisateurs sans avoir à revenir à la base de données. – Cory

+0

Faites juste Comment.select ("Commentaires. *, Utilisateurs. *") – Cory

2

Cela devrait fonctionner:

comments = Comment.joins(:user).includes(:user) 

Mais voici ce que je pense qui se passe, si vous regardez la sortie dans la console Windows, je pense que la sortie de la console reflète/inspecte uniquement l'objet de niveau racine qui est retourné.

Je viens de faire une expérience où j'ai exécuté le code ci-dessus. La sortie du terminal a enregistré qu'elle a récupéré les commentaires mais n'a pas mentionné l'utilisateur associé. Ensuite, j'ai arrêté la base de données afin qu'une deuxième requête ne puisse pas être exécutée contre la base de données, puis demandé l'utilisateur associé, par ex.

comments.user 

La sortie de la console de l'utilisateur, ce qui prouve qu'il a déjà été chargé avec impatience, car aucune connexion de base de données a été tentée.

+0

Intéressant. Je me demandais la même chose. Bien que la mise en cache des requêtes puisse créer de la confusion, vous pouvez également remarquer si une requête est déclenchée lorsque vous exécutez 'comments.user'. – wuliwong