2017-07-28 3 views
1

Um genauer zu sein, ich habe ein Modell, das Userhas_oneProfile, jetzt habe ich in der Notwendigkeit bin eine has_many Beziehung von User zu einem neuen Modell Contact, aber Contact ist wirklich eine Sammlung von Profile s hinzufügen (Benutzerhas_manyProfil s "hinter den Kulissen".Rails Datenmodellierung: Wie kann ich eine has_many-Beziehung modellieren, die eigentlich eine Sammlung eines anderen Modells ist?

basic diagram

Wie kann ich das richtig modellieren? Gibt es eine Möglichkeit zu vermeiden, das neue Modell Contact insgesamt zu erstellen?

Meine Sorge und Grund, diese Frage zu stellen ist, die eine ineffiziente Abfrage auszuführen, um die Benutzerkontakte Sammlung abzurufen: user.contacts und dann für jede Contact würde ich habe eine Abfrage erstellen jede Profile abzurufen, nicht wahr?

Wie kann ich es so, dass, wenn ich tun: user.contacts es eine Sammlung von Profiles ruft, dass Nicht/Zell unabhängig von der Beziehung user.profile ist?

Vielen Dank im Voraus!

Antwort

2

Sie würden nicht unbedingt ein neues Modell benötigen, aber es ist am einfachsten (zumindest meiner Meinung nach), eins zu haben, nur nicht in der Art und Weise, wie oben dargestellt.

Schienen beiseite, Sie benötigen eine Join-Tabelle, wie user_profiles, die Fremdschlüssel für user_id und profile_id enthält. Nun, wie Sie diese Arbeit machen, liegt ganz bei Ihnen.

Ihr Contact Modell hier ist tatsächlich, in einer mehr Rails-y Weise, ein UserProfile Modell. So könnte Ihre Benutzer wie folgt aussehen:

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

    has_one: profile 
end 

Hier user.contacts würden Sie die Profile erhalten. Sie haben noch das zusätzliche Modell, UserProfile, Sie nicht es in der Praxis nur verwenden:

class UserProfile 
    belongs_to :user 
    belongs_to :profile 
end 

, die Sie über aufbauen können:

rails g model UserProfile user:references profile:references

Hoffnung, das hilft!

+0

Es hilft viel, danke! eine kleine Nachfolgefrage, wie würde das Migration für UserProfiles Modell aussehen? – jlstr

+1

@jlstr Ich habe meine Antwort aktualisiert, um die Modell- und Migrationsdetails anzugeben. – GoGoCarl

+0

Fantastisch! Vielen Dank, mein Herr! – jlstr

Verwandte Themen