目的
お気に入り済みの商品を一覧表示する機能を実装する
前提条件
- 既にお気に入り機能を実装済みであること
- itemsテーブル(商品情報)、usersテーブル(ユーザー情報)、bookmarksテーブル(お気に入り情報)が存在すること。
- 各テーブルとアソシエーションが組まれていること
手順
1.ルーティングのネスト
2.Usersコントローラーを定義
3.お気に入り済みをビューファイルに表示
1.ルーティングのネスト
ユーザーがお気に入りをした商品を表示するために、usersコントローラーにbookmarksコントローラーをネスト(入れ子構造)します。
routes.rb
resources :users, only: [:show] do
get :bookmarks, on: :collection
end
2.Usersコントローラーを定義
Bookmarkモデルからwhereメソッドとpluckメソッドを使い現在ログイン中のuser_idとitem_idを引き出してbookmarksに代入します。
Itemモデルの引数に先ほど定義したbookmarksを指定して、インスタンス変数@bookmark_listに代入します。
users_controller.rb
def show
@user = User.find(params[:id])
@items = @user.items
bookmarks = Bookmark.where(user_id: current_user.id).pluck(:item_id)
@bookmark_list = Item.find(bookmarks)
pluckの補足情報
https://railsdoc.com/page/model_pluck
3.お気に入り済みをビューファイルに表示
ユーザーのマイページにusersコントローラーで定義した@bookmark_listを使用して、お気に入りした商品を表示していきます。
if文とpresent?メソッドを使い、@bookmark_listにデータが保存されている場合に実行する様にします。
今回は商品の名前と画像を表示するように記述しました。
users/show.html.erb
<% if @bookmark_list.present? %>
<% @bookmark_list.each do |item| %>
<%= item.name %>
<%= image_tag item.image%>
<% end %>
<% end %>
さいごに
お気に入り一覧表示機能を実装出来たので投稿しました。
最後まで読んで頂きありがとうございます。