現在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
追加でお伝えすべき情報があれば、ご教示いただけますと幸いです。
何卒宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。