2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby on Rails】お気に入り済みを一覧表示する

Posted at

目的

お気に入り済みの商品を一覧表示する機能を実装する

前提条件

  • 既にお気に入り機能を実装済みであること
  • 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 %>

さいごに

お気に入り一覧表示機能を実装出来たので投稿しました。
最後まで読んで頂きありがとうございます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?