前提・実現したいこと
テーブル設計とアソシエーションについて相談したいことがあります。
以下の内容でアプリを制作しています。
以下の機能を実装します。
・User(消費者)とProducer(生産者)、Restaurant(飲食店)が存在する
・Userだけが持つカラム(SNSのID, 性別, 年代)
・Producer/Restaurantだけが持つカラム(住所, 電話番号)
・3つのモデルはインスタグラムのように同じPostを投稿できる
・Post.allでpost一覧を取得することもある
・User.posts / Shop_user.posts /Restaurant.posts でpostをモデル別に分けて取得することもある
質問です
その場合のアソシエーションが調べても分かりません。
postテーブルには user_id と shop_user_id、Restaurant_id がどれであっても格納できる「post_owner_id」のような共通カラムを作ると、userやshop_userのidが同じだった場合におかしなことになるとは理解しています。
そうなると、以下のアイデアのうちどれが好ましいのでしょうか?
#####(1)・postテーブルに3つのカラム
postテーブルにはuser_id と shop_user_id、restaurant_id のカラムをそれぞれ3つ作る。nilの場合が生まれるのでそれぞれにoptional :trueをつける。
#####(2)3つのモデルに対してそれぞれ別のpostテーブルを作成
userはuser_postsを作成
producerはproducer_postsを作成
RestaurantはRestaurant_postsを作成
#####(3)全てUserに統一しuser_kindカラムでタイプ分け
・User(消費者)とProducer(生産者)、Restaurant(飲食店)はモデルで分けず
userに「user_kind」というカラムを作成し、userだったら0, Producerだったら1などと
登録時に挿入。
人格によってプロフィールが異なるので、
userの場合はhas_oneの関係でuser_profileテーブルをもたせ
Producer/Restaurantには同じくhas_oneの関係でbusiness_profileテーブルをもたせる
#####(4)もしくは・・・?
他にそういう場合の王道設計などはあるのでしょうか?
##私の考え
(1)が一番シンプルな気もしますが自信がありません。
railsを学び始めて長くなく、なんども調べましたが適当な情報も見つかりません。アドバイスのほどよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/16 08:28