😊
[Rails]いいね機能の作成(ルーティング・コントローラ編)
前回書いた記事に引き続き、いいね機能をまとめていきます。
ルーティング
# tasksコントローラのルーティング
resources :tasks, only: [:new, :create, :index, :show, :edit, :update, :destroy] do
resources :favorite, only: [:create, :destroy], as: "favorites"
resources :task_comments, only: [:create, :destroy], as: "comments"
end
resources 部分
resources
はルーティングを一括作成するもの。
resources :tasks, only: [:new, :create, :index, :show, :edit, :update, :destroy] do
上記は、タスクに関するアクションを定義している。
「タスクのアクションはこれですよ、以下をルーテイングしてね」
「タスクリソースに対してどのアクションを使用するか」を指定してる。
do ... end 部分
do ... end
の中で、タスクに紐づくいいねとコメントのルーティングを定義。
「タスクのルーティングの中で、いいねとコメントのURLを作成しますよ。いいねとコメントはクリエイトと削除のアクションだけ使用するのでルーティングしてね…」ということを表している。
(tasks/:task_id/favorites
というURLで、いいねの作成・削除を行う。)
コントローラ
class Public::FavoritesController < ApplicationController
def create
task = Task.find(params[:task_id])
favorie = current.user.favorites.new(task_id: task.id)
favorite.save
redirect_to task_path(task)
end
end
処理の流れ
①タスクの取得(task = Task.find(params[:task_id])部分)
task = Task.find(params[:task_id])
-
params[:task_id]
で、リクエストURLに含まれるtask_id
を取得。 -
Task.find(params[:task_id])
で、そのIDに対応するタスクをデータベースから取得する。
例えば、URLが /tasks/5/favorites
だとすると、params[:task_id]
には 5
が格納され、Task.find(5)
でIDが5のタスクを取得する。
②いいねを作成(favorie = current.user.favorites.new(task_id: task.id)部分)
favorie = current.user.favorites.new(task_id: task.id)
current_user.favorites.new(task_id: task.id)
で、ログインユーザが新しい「いいね」オブジェクトを作成する。それを変数「favorie」に代入。
(task_id: task.id) 部分
いいね(favorite)を作成する際に、どのタスクに紐づけるかを指定している。
Rubyのハッシュの記法を使用している。
task_id: task.id
上記ハッシュをnewメソッドに渡すことで、新しいfavoriteオブジェクトを作成したら、task_id
に task.id
をセットする。
task = Task.find(params[:task_id])
- URLから task_id を取得(例: /tasks/5/favorites の場合、params[:task_id] == 5)
- Task.find(5) で、IDが 5 のタスクを取得
- task.id は 5
current_user.favorites.new(task_id: task.id)
- current_user.favorites.new(...) → ログインユーザーのいいねを新規作成
- task.id → 1で取得したタスクID。中身は「5」。
- task_id → favorites テーブルのカラム名。今回作成した新しいfavoriteオブジェクトのtask_idに、task.id(5)を紐づけている。
favorites
テーブル(いいね)
id | user_id | task_id | created_at | updated_at |
---|---|---|---|---|
1 | 2 | 5 | 2025-02-02 | 2025-02-02 |
-
user_id: 2
→ ユーザーID 2の人が -
task_id: 5
→ タスクID 5にいいねをした
Discussion