投稿を削除したいが削除ボタンを押すとエラーが出てしまう。
解決したいこと
Ruby on Railsでの写真投稿をメインとしたWebアプリをつくっています。
投稿を削除したいが削除ボタンを押すとエラーが出てしまう。
解決方法を教えていただけると幸いです。
発生している問題・エラー
NameError in RecipesController#destroy
uninitialized constant Recipe::Comment
Extracted source (around line #37):
def destroy
@recipe.destroy ←赤字部分
redirect_to root_path
end
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
recipes_controller.rb
class RecipesController < ApplicationController
before_action :set_recipe, except: [:index, :new, :create]
before_action :contributor_confirmation, only: [:edit, :update, :destroy]
def index
@recipes = Recipe.includes(:user)
end
def new
@recipe = Recipe.new
end
def create
@recipe = Recipe.new(recipe_params)
if @recipe.save
redirect_to root_path
else
render :new
end
end
def show
end
def edit
end
def update
if @recipe.update(recipe_params)
redirect_to recipe_path(@recipe)
else
render :edit
end
end
def destroy
@recipe.destroy
redirect_to root_path
end
private
def recipe_params
params.require(:recipe).permit(:title, :cream, :procedure, :image).merge(user_id: current_user.id)
end
def set_recipe
@recipe = Recipe.find(params[:id])
end
def contributor_confirmation
redirect_to root_path unless current_user == @recipe.user
end
end
show.index.erb
<main class="main">
<div class="inner">
<div class="recipe__wrapper">
<p class="recipe__hedding">
<%= @recipe.title %>
</p>
<%= 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">
<%# ログインしているユーザーには以下のコメント投稿フォームを表示する %>
<%# <%= form_with model: モデル名,local: true do |f|%>
<div class="field">
<%# <%= f.label :hoge, "コメント" %><br />
<%# <%= f.text_field :hoge, id:"comment_text" %>
</div>
<div class="actions">
<%# <%= f.submit "送信する", class: :form__btn %>
</div>
<%# <% end %>
<%# // ログインしているユーザーには上記を表示する %>
<ul class="comments_lists">
<%# 投稿に紐づくコメントを一覧する処理を記述する %>
<li class="comments_list">
<%# <%= " コメントのテキスト "%>
<%# <%= link_to "( ユーザー名 )", root_path, class: :comment_user %>
</li>
<%# // 投稿に紐づくコメントを一覧する処理を記述する %>
</ul>
</div>
</div>
</div>
</main>
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
end
resources :users, only: :show
end
自分で試したこと
deleteやdestroyにスペルミスがあるのではないかと考え、確認した。
controllerの中身のendの場所に問題がないか考えた。
0