前提・実現したいこと
コメント機能の削除
railsで簡単な大喜利サイト製作中です。
themes(お題)コントローラーに対してアソシエーションを利用してanswer(回答機能)を作ったのですが、回答の削除機能製作中に、destroyに対する引数の設定でエラーがおきました
発生している問題・エラーメッセージ
Couldn't find Answer with 'id'=2 [WHERE "answers"."theme_id" = ?]
Extracted source (around line #20):
18
19
20
21
22
23
def destroy
@theme = Theme.find(params[:theme_id])
@answer = @theme.answers.find(params[:id])
@answer.destroy
redirect_back(fallback_location: root_path)
end
該当のソースコード
answerscontroller
1 class AnswersController < ApplicationController 2 before_action :authenticate_user! 3 4 def create 5 # @answer = Answer.new(answer_params) 6 theme = Theme.find(params[:theme_id]) 7 @answer = theme.answers.build(answer_params) 8 @answer.user_id = current_user.id 9 if @answer.save 10 flash[:success] = "コメントしました" 11 redirect_back(fallback_location: root_path) 12 else 13 flash[:success] = "コメントできませんでした" 14 redirect_back(fallback_location: root_path) 15 end 16 end 17 18 def destroy 19 @theme = Theme.find(params[:theme_id]) 20 @answer = @theme.answers.find(params[:id]) 21 @answer.destroy 22 redirect_back(fallback_location: root_path) 23 end 24 25 private 26 27 def answer_params 28 params.require(:answer).permit(:answer) 29 end 30end 31
themescontroller
1def show 2 @theme = Theme.find(params[:id]) 3 @answers = @theme.answers 4 @answer = @theme.answers.build 5 end 6 7
showhtmlerb
1 2 3<% @answers.each do |a| %> 4 <div> 5 <%= a.user.email unless a.user.blank? %> 6 <br> 7 <%= a.answer %> 8 <%= link_to "削除",theme_answer_path(a.theme_id,a.id),method: :delete %> 9 10 </div> 11 <br> 12 <% end %>
answerrb
1class Answer < ApplicationRecord 2 belongs_to :user 3 belongs_to :theme 4 end
themerb
1class Theme < ApplicationRecord 2 mount_uploader :image, ImageUploader 3 belongs_to :user 4 has_many :answers ,dependent: :destroy 5end 6 7
railsroutes
1theme_answer DELETE /themes/:theme_id/answers/:id(.:format) answers#destroy 2
routesrb
1Rails.application.routes.draw do 2 devise_for :users 3 root "home#top" 4 resources :themes do 5 resources :answers, only: [:create,:destroy] 6 end 7 8end 9 10
試したこと
<%= link_to "削除",theme_answer_path(a.theme_id,a.id),method: :delete %>など試しましたがエラーが出てしまい、稚拙な質問かもしれませんが回答お願いします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。