いいね機能を実装しようとしたらNoMethodErrorが出てしまった。
前提・実現したいこと
Railsで写真投稿アプリを作っています
いいね機能を実装中に以下のエラーメッセージが発生しました。
難しいかもしれませんがお力を貸していただけると幸いです。
NoMethodError in Recipes#show
Showing /Users/projects/shoes-recipe/app/views/recipes/show.html.erb where line #8 raised:
undefined method `id' for nil:NilClass
発生している問題・エラーメッセージ
Extracted source (around line #8):
</p>
<% if Like.find_by(user_id: @current_user.id, recipe_id: @recipe.id) %> **←赤字部分**
<%= link_to("/likes/#{@recipe.id}/destroy", {method: "recipe"}) do %>
<span class="fa fa-heart like-btn-unlike"></span>
<% end %>
該当のソースコード
show.html.erb
<main class="main">
<div class="inner">
<div class="recipe__wrapper">
<p class="recipe__hedding">
<%= @recipe.title %>
</p>
<% if Like.find_by(user_id: @current_user.id, recipe_id: @recipe.id) %>
<%= link_to("/likes/#{@recipe.id}/destroy", {method: "recipe"}) do %>
<span class="fa fa-heart like-btn-unlike"></span>
<% end %>
<% else %>
<%= link_to("/likes/#{@recipe.id}/create", {method: "recipe"}) do %>
<span class="fa fa-heart like-btn"></span>
<% end %>
<% end %>
<%= @likes_count %>
<%= link_to "by #{@recipe.user.name}", user_path(@recipe.user), class: :recipe__user %>
<% if current_user == @recipe.user%>
<div class="recipe__manage">
<%= link_to "編集する", edit_recipe_path(@recipe), class: :recipe__btn %>
<%= link_to "削除する", recipe_path(@recipe), method: :delete, class: :recipe__btn %>
</div>
<% end %>
<div class="recipe__image">
<%= image_tag @recipe.image %>
</div>
<div class="recipe__body">
<div class="recipe__detail">
<p class="detail__title">使った道具</p>
<p class="detail__message">
<%= @recipe.cream %>
</p>
</div>
<div class="recipe__detail">
<p class="detail__title">手入れの手順</p>
<p class="detail__message">
<%= @recipe.procedure %>
</p>
</div>
</div>
<div class="recipe__comments">
<% if user_signed_in? %>
<%= form_with model: [@recipe, @comment], local: true do |f|%>
<div class="field">
<%= f.label :text, "コメント" %><br />
<%= f.text_field :text %>
</div>
<div class="actions">
<%= f.submit "送信する", class: :form__btn %>
</div>
<% end %>
<% end %>
<ul class="comments_lists">
<% @comments.each do |comment| %>
<li class="comments_list">
<%= comment.text%>
<%= link_to "(#{comment.user.name})", user_path(comment.user), class: :comment_user %>
</li>
<% end %>
<ul>
</div>
</div>
</div>
</main>
likes_controller.rb
class LikesController < ApplicationController
before_action :authenticate_user
def create
@like = Like.new(user_id: @current_user.id, recipe_id: params[:recipe_id])
@like.save
redirect_to("/recipes/#{params[:recipe_id]}")
end
def destroy
@like = Like.find_by(user_id: @current_user.id, recipe_id: params[:recipe_id])
@like.destroy
redirect_to("/recipes/#{params[:recipe_id]}")
end
end
routes.rb
Rails.application.routes.draw do
devise_for :users
root to: "recipes#index"
resources :recipes, only: [:new, :create, :show, :edit, :update, :destroy] do
resources :comments, only: :create
resources :likes, only: [:create, :destroy]
end
resources :users, only: :show
end
試したこと
ターミナルを見たところrecipeのidは取得できているのだが、userのidが取得できていないようです。
progateのやり方に沿って作業をしていたのだがどうしてもうまくいきません。
お力を貸していただけると幸いです。
0