Ruby On Railsでいいね機能を実装したい
はじめまして。Rails初学者です。
現在Railsで食品検索サービスを作成しています。
そこで、ユーザーが検索結果にいいね機能を付けたいと考えているのですが、以下の2点が上手くできません。
・『いいねしている場合はハートマーク・いいねしていない場合は星マーク』の条件分け
・いいねの新規作成(テーブルは作成済)
どなたか知恵を貸していただけないでしょうか。
よろしくお願いいたします。
該当のソースコード
<!--部分テンプレート--> <% if user_signed_in? %> <% like = item.get_like_by(user_id: current_user.id) %> <% if like %> <%= button_to item_like_path(like, item_id: item.id), method: :delete, id: "like-button", remote: true do %> <i class="fas fa-heart"></i> <% end %> <% else %> <%= button_to item_likes_path(item.id,like.id), id: "like-button", method: :post, remote: true do %> <i class="fas fa-star"></i> <% end %> <i class="fas fa-star"></i> <% end %> <% end %>
class ItemsController < ApplicationController def index @q = Item.ransack(params[:q]) @makers = Maker.all @types = Type.all @items = @q.result.eager_load(:likes) end def search_params params.require(:q).permit(:maker_id_eq) end end
class Item < ApplicationRecord belongs_to :maker,foreign_key: "maker_id" belongs_to :type,foreign_key: "type_id" has_many :likes def get_like_by(user_id) likes.each do |like| if like.user_id == current_user.id then return like end return null end end end
class LikesController < ApplicationController def create @like = Like.create(user_id: current_user.id, item_id: params[:item_id]) @likes = Like.where(item_id: params[:item_id]) @items = Item.all end def destroy like = Like.find_by(user_id: current_user.id, item_id: params[:item_id]) like.destroy @likes = Like.where(item_id: params[:item_id]) @items = Item.all end end
class Like < ApplicationRecord belongs_to :item belongs_to :user end
Rails.application.routes.draw do resources :items do resources :likes, only: [:create, :destroy] end #以下省略
試したこと
下記URLを参考にしています。
https://qiita.com/YuitoSato/items/94913d6a349a530b2ea2
補足情報
Rails 5.2.2
ユーザー周りはdevise・検索機能はransackを使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/22 10:51