前提・実現したいこと
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
#####コントローラー
favorite_controller
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
以下のように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"
回答1件
あなたの回答
tips
プレビュー