【rails】お気に入り機能が実装できません。
解決したいこと
レシピサイトを作成のため、現在レシピのお気に入り機能を実装中ですが、上手く機能しません。
以下のようにクリックしてもお気に入りボタンの変更がありません。
解決方法を教えてください。
該当するソースコード
ルーティング
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