@irpzvlkqPzQYTdL

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

同期いいね機能の実装に伴うエラーについて(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

No Answers yet.

Your answer might help someone💌