Ruby on Rails: Comment joindre deux tables
J'ai une page d'index que je veux montrer à tous le profil des utilisateurs et de leurs photos. Je suis en utilisant le plugin en forme de Trombone pour les photos. Dans les Profils de contrôleur, j'ai la variable d'instance @profil, mais il me montre le tableau dans le tableau profils seulement et non pas les photos de la table.
@profile = Profile.find(:all, :include => :photos,
:joins => "INNER JOIN photos ON photos.profile_id = profiles.id")
Les modèles sont présentés ci-dessous:
class Profile < ActiveRecord::Base
has_many :photos
end
class Photo < ActiveRecord::Base
belongs_to :profile
end
Ce que je veux être en mesure de montrer le point de Vue est quelque chose comme:
- Le profil de John (p. ex., nom, âge, sexe) - l'image de John (par exemple, une seule image ci)
- Marie de profil ici - Marie de l'image montrée ici
- Bob profil de l'ici - Bob l'image montrée ici
Si un Profil a beaucoup de Photos, comment voulez-vous déterminer qui de l'image à afficher pour un Profil particulier? Si tel devait être un one-to-one relation? (Il y aurait quelques façons de le faire que dans la base de données - Profil pourrait avoir une clé étrangère pour profile_photo, par exemple, ou il pourrait être un booléen colonne de Photos indiquant si une photo est particulièrement destiné à être le "principal")
Oui, j'ai un booléen colonne dite primaire. Si elle est définie sur 1, il devrait afficher la photo.
Oui, j'ai un booléen colonne dite primaire. Si elle est définie sur 1, il devrait afficher la photo.
OriginalL'auteur Max | 2009-04-19
Vous devez vous connecter pour publier un commentaire.
J'ai édité ma réponse à refléter vos commentaires.
Tout d'abord, vous ne devriez pas besoin de la
:joins
paramètre;:include => :photos
doit gérer le rejoindre "derrière les coulisses" pour vous.Voici une façon de faire ce qu'on vous demande.
(dans les modèles)
(dans le contrôleur)
(dans la vue)
Ok, ça fonctionne maintenant. Je devrais être à l'aide de tinyint au lieu de int pour la primaire de la colonne dans la base de données.
OriginalL'auteur Greg Campbell