2017-07-28 9 views
1

は、具体的には、私は、has_oneのProfileUserモデルを持っている(今は新しいモデルContactUserからにhas_many関係を追加する必要にだけど、Contactが本当にProfileのコレクションです"ユーザーhas_manyプロファイル"背後にある ")。Railsデータモデリング:実際に別のモデルのコレクションであるhas_many関係をどのようにモデル化できますか?

basic diagram

どのように私はこれを正しくモデル化するのですか?新しいモデルContactの作成を避ける方法はありますか?

私の関心、そしてこの質問をする理由は、ユーザーの連絡先コレクション取得するために、非効率的なクエリを実行する必要がされていますuser.contactsをし、各Contactのために、私は右、各Profileを取得するためのクエリを作成する必要があるだろうか?私が行うときになるように、私はそれを作ることができますどのように

user.contactsそれはが干渉しない/ user.profile関係とは無関係であることをProfilesのコレクションを取得しますか?

ありがとうございます!

答えて

2

あなたは必ずしも新しいモデルが必要なわけではありませんが、少なくとも私の意見では、上記のような方法ではありません。

レールを除いて、user_idprofile_idの外部キーを含むuser_profilesのような結合テーブルが必要です。今、あなたはその仕事をどのようにするかはあなた次第です。

ここのContactモデルは実際には、より多くのRails-y方法で、モデルです。 user.contactsはあなたのプロファイルになるだろう、

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

    has_one: profile 
end 

:だからあなたのユーザーは次のようになります。支援を期待

rails g model UserProfile user:references profile:references

:経由

あなたが構築することができます
class UserProfile 
    belongs_to :user 
    belongs_to :profile 
end 

:あなたはまだ余分なモデル、UserProfileは、あなただけの練習でそれを使用しないことがあります!

+0

多くの方に感謝します。ちょっとフォローアップの質問ですが、UserProfiles Modelのマイグレーションはどのように見えますか? – jlstr

+1

@jlstrモデルと移行の詳細を含めるように私の答えを更新しました – GoGoCarl

+0

素晴らしい!ありがとうございます! – jlstr

関連する問題