【rails】コメント機能の実装①

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

コメント機能を実装する

1対n(1:多)

  • ユーザーと記事 → 1対n
  • 記事とコメント → 1対n
それぞれの関係性
  • ユーザー
    • 記事1
      • コメント
      • コメント
    • 記事2
      • コメント
      • コメント
      • コメント

それぞれがどこに紐づいているのか把握し、関連付けをする

commentテーブルでarticle_idを指定し、コメントを記事に紐づける


Commentモデルを作る

ターミナル画面で以下を実行する

rails g model Comment

実行すると、マイグレーションが作成される


commentsをarticleと紐づける

ユーザーと記事を紐づけたときと同様、referencesを使う

article(article_id)がないと絶対に保存できません

t.references :article, null: false


データベースに反映させる

ターミナル画面で以下を実行する

rails db:migrate

データベースに反映し、Commentモデルに「article_id」も作られている


articleとcommentを関連づける

t.references :articleによりデータベース上は紐づいたので、rails上(ActiveRecord)でも関連付けていく

記事はひとつ「article(単数形)」、コメントはn個「comments(複数形)」と書くこと


app/models/article.rbを開く

  • 「articleはcommentsをたくさん持っている(has_many)」
  • 「articleを消したら、commentsも削除するよ(dependent: :destroy)」

has_many :comments, dependent: :destroy

app/models/comment.rbを開く

  • 「commentはarticleに所属(belongs_to)している」
class Comment < ApplicationRecord
  belongs_to :article
end

コメントの表示方法について

記事詳細ページにコメントを連ねていく形にする

→ 新しいview(show・index)は不要


urlの設定について

「/articles/10」の記事にコメントをしたい

→ 「/articles/10/comments/new」

入れ子構造にして関係づけると分かりやすい


入れ子構造のurlを作成する

config/routes.rbを開く

「/articles/◯◯/comments/◯◯」というurlを作る

  resources :articles do
    resources :comments
  end

↓ 実行すると、commentに関わるurlが用意される

次回、実際にコメントを作成する

#DAY22