※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
コメント機能を実装する
1対n(1:多)
- ユーザーと記事 → 1対n
- 記事とコメント → 1対n
それぞれの関係性
- ユーザー
- 記事1
- コメント
- コメント
- 記事2
- コメント
- コメント
- コメント
- 記事1
それぞれがどこに紐づいているのか把握し、関連付けをする
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(複数形)」と書くこと
- 「articleはcommentsをたくさん持っている(
has_many
)」 - 「articleを消したら、commentsも削除するよ(
dependent: :destroy
)」
has_many :comments, dependent: :destroy
- 「commentはarticleに所属(
belongs_to
)している」
class Comment < ApplicationRecord
belongs_to :article
end
記事詳細ページにコメントを連ねていく形にする
→ 新しいview(show・index)は不要
「/articles/10」の記事にコメントをしたい
→ 「/articles/10/comments/new」
入れ子構造にして関係づけると分かりやすい
config/routes.rbを開く
「/articles/◯◯/comments/◯◯」というurlを作る
resources :articles do
resources :comments
end
↓ 実行すると、commentに関わるurlが用意される
次回、実際にコメントを作成する
#DAY22