kmjooh
@kmjooh (Masayuki Kamijo)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【rails】お気に入り機能が実装できません。

解決したいこと

レシピサイトを作成のため、現在レシピのお気に入り機能を実装中ですが、上手く機能しません。
以下のようにクリックしてもお気に入りボタンの変更がありません。
解決方法を教えてください。

Image from Gyazo

該当するソースコード

ルーティング
routes.rb
  resources :recipes do
    collection do
      get 'search'
    end
    resources :favorites, only: [:create, :destroy]
  end
モデル
user.rb
has_many :favorites, dependent: :destroy
has_many :fav_recipes, through: :favorites, source: :recipe
recipe.rb
has_many :favorites, dependent: :destroy
has_many :users, through: :favorites
favorite.rb
belongs_to :user
belongs_to :recipe
コントローラー
favorites_controller.rb
  def create
    @recipe = Recipe.find(params[:id])
    if @recipe.user_id != current_user.id
      @favorite = Favorite.create(user_id: current_user.id, recipe_id: @recipe.id)
    end
  end

  def destroy
    @recipe = Recipe.find(params[:id])
    @favorite = Favorite.find_by(user_id: current_user.id, recipe_id: @recipe.id)
    @favorite.destroy
  end
ビュー
recipes.show.html.erb
<div class="d-inline-block" id="favorite_<%= @recipe.id %>">
  <%= render partial: 'favorites/favorite_button', locals: {recipe: @recipe} %>
  <%= @recipe.user.name %>
</div>
favorites._favorite_button.html.erb
<% if !Favorite.exists?(user_id: current_user.id, recipe_id: recipe.id) %>
  <%= link_to recipe_favorites_path(recipe), method: :post, remote: true do %>
    <i class="far fa-star"></i>
  <% end %>
  <span class="star-count1"><%= recipe.favorites.count %></span>
<% else %>
  <%= link_to recipe_favorites_path(recipe), method: :delete, remote: true do %>
    <i class="fas fa-star"></i>
  <% end %>
  <span class="star-count2"><%= recipe.favorites.count %></span>
<% end %>

Ajaxにも以下のように対応させています。

favorites.create.js.erb
$('#favorite_<%= @recipe.id %>').html("<%= j(render partial: 'favorites/favorite_button', locals: { recipe: @recipe }) %>");
favorites.destroy.js.erb
$('#favorite_<%= @recipe.id %>').html("<%= j(render partial: 'favorites/favorite_button', locals: { recipe: @recipe }) %>");
application.js
//= require jquery
//= require rails-ujs
Gemfile
gem "jquery-rails"

宜しくお願いします。

0

No Answers yet.

Your answer might help someone💌