質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

970閲覧

Rails  お気に入り機能設計時のテーブル設計について

ckr

総合スコア23

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/03 02:38

現在Rails を用いてアプリを開発中で、お気に入り機能(いいね機能)を実装したいと
考えており、モデル設計について質問させていただきたく、投稿しました。

【行いたいこと】
ユーザーとしては、個人のuserモデルと企業のcompanyモデルがあります。
companyモデルのみ、投稿(post)ができ、その投稿に対して、userのみ
お気に入り(likeモデル)ができるような設計を考えています。

userとcompanyは1対1
userとlikeは1対多
companyとpostは1対多
postとlikeは1対多(親子関係)

となっております。

現在は以下の構造を取っており、companyとlikeの間に
なにも関連付けがない状況です。
機能としては、userがpost(companyが投稿している)に対してlikeを行うという
機能なので、companyとlikeについて関連付けを行わず、このまま進めても問題ないでしょうか。

ruby:likesテーブルの構造

1create_table :likes do |t| 2 t.references :user,foreign_key: true 3 t.references :post,foreign_key: true

postsテーブルの構造

1 2create_table :posts do |t| 3 t.references :company,foreign_key: true 4 t.text :title 5 t.text :contents

companiesテーブルの構造

1 create_table :companies do |t| 2 3t.string :email,null: false 4 t.string :name,null: false 5 t.string :profile_photo, null: false 6 t.text :profile
create_table :users do |t| t.string :email,null: false, default: "" t.string :encrypted_password, null: false, default: "" t.string :reset_password_token t.datetime :reset_password_sent_at t.datetime :remember_created_at t.string :name,null: false t.string :profile_photo, null: false t.integer :age t.string :sex t.text :profile
userモデル class User < ApplicationRecord has_many :chat_messages,dependent: :destroy has_many :chat_rooms has_many :likes
likeモデル class Like < ApplicationRecord belongs_to :user belongs_to :post validates :user_id, uniqueness: { scope: :post_id } end
companyモデル class Company < ApplicationRecord has_many :posts, dependent: :destroy mount_uploader :profile_photo, ProfilePhotoUploader has_secure_password end
postモデル class Post < ApplicationRecord validates :title, presence: true,uniqueness: { scope: :company_id } validates :contents, presence: true,uniqueness: { scope: :company_id } belongs_to :company default_scope -> { order(created_at: :desc) } has_many :likes, -> { order(created_at: :desc) }, dependent: :destroy

追加でお伝えすべき情報があれば、ご教示いただけますと幸いです。
何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決できましたので「共有です。
companyモデルのみ、投稿(post)ができ、その投稿に対して、userのみ
お気に入り(likeモデル)ができるような設計であっても、
likeモデルのカラムは、user(references型)company(references型)を作れば、いいね昨日が実装できそうです。

投稿2020/05/05 02:05

ckr

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問