tatsuya-k
@tatsuya-k (Kimura Tatsuya)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

投稿を削除したいが削除ボタンを押すとエラーが出てしまう。

解決したいこと

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

1Answer

Your answer might help someone💌