同期いいね機能の実装に伴うエラーについて(rails,ruby)
解決したいこと
Ruby on Railsで、レシピアプリの様なWebアプリケーションを作成しており、いいね機能を実装中に
いいねを取り消す際にエラーがでてしまっています。
解決方法を教えて下さい。
発生している問題・エラー
ActionController::UrlGenerationError in Recipes#index
No route matches {:action=>"destroy", :controller=>"likes", :recipe_id=>#<Recipe id: 33, title: "こ", price: 200, body: "こ", user_id: 2, created_at: "2020-11-12 08:27:07", updated_at: "2020-11-12 08:27:07">}, missing required keys: [:id]
該当するソースコード
index.html.erb
<div class='iine'>
<%if user_signed_in? %>
<%= link_to "いいねを外す", recipe_like_path(recipe), method: :delete %>
<%= link_to "いいね", recipe_likes_path(recipe), method: :post %>
<% else %>
<% end %>
<%= recipe.likes.count %>
関連するソースコード
コントラローラー
likes_controller.rb
class LikesController < ApplicationController
def create
@like = current_user.likes.create(recipe_id: params[:recipe_id])
redirect_back(fallback_location: root_path)
end
def destroy
@recipe = Recipe.find(params[:recipe_id])
@like = current_user.likes.find_by(recipe_id: @recipe.id)
@like.destroy
redirect_back(fallback_location: root_path)
end
end
各モデル
like.rb
class Like < ApplicationRecord
belongs_to :user
belongs_to :recipe
validates_uniqueness_of :recipe_id, scope: :user_id
end
recipe.rb
class Recipe < ApplicationRecord
has_one_attached :image
belongs_to :user
has_many :likes, dependent: :destroy
validates :price, :body, :image, presence: true
validates :title, presence: true, length: { maximum: 20 }
end
user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :nickname, presence: true, length: { maximum: 7 }
has_many :recipes, dependent: :destroy
has_many :likes, dependent: :destroy
def already_liked?(recipe)
self.likes.exists?(recipe_id: recipe.id)
end
end
関連するルーティング
routes.rb
Rails.application.routes.draw do
devise_for :users
root to: 'recipes#index'
resources :recipes do
resources :likes, only: [:create, :destroy]
end
end
rails routesの結果
recipe_likes POST /recipes/:recipe_id/likes(.:format) likes#create
recipe_like DELETE /recipes/:recipe_id/likes/:id(.:format) likes#destroy
自分で試したこと
エラー文missing required keys: [:id]の記載があり、キーが見当たりませんとの記述があり、他の記事を拝見しながら、キーの情報を取得できるように色々と試しましたが、上手く解決することができませんでした。
もし、ヒント等いただけましたら、ご教授の程、よろしくお願いいたします。
0 likes