⭐️ブックマーク機能の追加
◉モデルのアソシエーション
uniqunessヘルパーのscopeオプションにboard_idを指定することで、
各掲示板(board_id)別にユーザー(user_id)との関係性を一意にすることができる
validates :user_id, uniqueness: { scope: :board_id }
この記載によって、
「1ユーザー」が「1つの掲示板」に対して「1ブックマーク」という範囲を限定した一意チェックができる
・app/model/user.rb
has_many :bookmark_boards, through: :bookmarks, source: :board
ユーザーモデルは複数のブックマークされた掲示板(bookmark_boards)を持っている。
through
オプションでbookmarkテーブルを経由してuserモデルとアソシエーションを作成。
bookmark_boardsは仮のテーブル名なので、source
オプションで参照するテーブルを指定している
・has many :throughオプションで関連付けすると何がいいのか
ユーザーがお気に入りした掲示板を直接取得することができるようになる!
ユーザーがお気に入りした掲示板の一覧を取得するときに使う。
app/controller/boards_controller
・collection
オプションを使うことでboardsリソースの中にbookmarks
アクションを追加できる、この時bookmarks_boards_urlやbookmarks_boards_pathといったルーティングヘルパーも使えるようになる。
ほぉ、、、collection
オプションって便利🤔✨
◉コントローラー、もろもろの設定の流れ
・bookmarks_controllerを生成する
・bookmarkする処理はモデルに定義する
・自分が作った掲示板かを判定するメソッドをモデルに定義する(定義済)
・bookmarkしてるかを判定するメソッドをモデルに定義する
・bookmarks_controllerのcreateアクション、destroyアクションを定義する
・bookmarksアクションを定義する
◉ブックマークの処理
・ブックマークの処理はモデルに記載するらしい!
理由はコントローラーに記載すると可読性が落ちるため
上記、補足※ブックマークのメソッドはrailsの7つのアクションと違う名前で定義するから
🟢総括
今回はブックマーク(お気に入り機能)の実装でしたが、ブックマーク機能はモデルにメソッドの定義をしたり、今までのUser、Board、Commentモデルに加えての実装だったので、各モデルとのアソシエーションやルーティング関係が特に難しかったです。
これから課題をこなすにあたって、include
だったり、path
などのヘルパーメソッドについても、これから深く勉強していかないとダメだなと感じました。