2017-07-28 1 views
1

Pour être plus précis, j'ai un modèle User que has_oneProfile, maintenant je suis dans la nécessité d'ajouter un has_many relation de User à un nouveau modèle Contact, mais Contact est vraiment une collection de Profile s ("Utilisateurhas_manyProfil s" dans les coulisses ".Rails Data Modeling: Comment modéliser une relation has_many qui est en fait une collection d'un autre modèle?

basic diagram

Comment modéliser correctement ce? Y at-il un moyen d'éviter de créer le nouveau modèle Contact tout à fait?

Ce qui me préoccupe, et la raison de poser cette question est d'avoir à exécuter une requête inefficace pour récupérer l'utilisateur Contacts collection: user.contacts puis pour chaque Contact je dois créer une requête pour récupérer chaque Profile, non?

Comment puis-je faire en sorte que quand je fais: user.contacts il récupère une collection de Profiles que N'a pas interférer/est indépendante de la relation user.profile?

Merci d'avance!

Répondre

2

Vous n'auriez pas nécessairement besoin d'un nouveau modèle, mais il est plus facile (du moins, à mon avis) d'en avoir un, mais pas de la manière présentée ci-dessus.

Rails de côté, vous avez besoin d'une table de jointure, comme user_profiles, qui contient des clés étrangères pour user_id et profile_id. Maintenant, comment vous faites ce travail est à vous.

Votre modèle Contact ici est en fait, de manière plus Rails-y, un modèle UserProfile. Ainsi, votre utilisateur pourrait ressembler à:

class User 
    has_many :user_profiles # the join table 
    has_many :contacts, through: :user_profiles 

    has_one: profile 
end 

Ici, user.contacts voulez-vous obtenir les profils. Vous avez encore ce modèle supplémentaire, UserProfile, vous venez de ne pas l'utiliser dans la pratique:

class UserProfile 
    belongs_to :user 
    belongs_to :profile 
end 

qui vous pouvez construire via:

rails g model UserProfile user:references profile:references

Hope that helps!

+0

Ça aide beaucoup, merci! une petite question de suivi, à quoi ressemblerait le modèle de migration pour UserProfiles? – jlstr

+1

@jlstr J'ai mis à jour ma réponse pour inclure les détails du modèle et de la migration – GoGoCarl

+0

Fantastique! Merci beaucoup monsieur! – jlstr