「Ruby on Rails」に現在取り組んでいるのですが、「destoryアクション」を導入し、削除機能を追加しようと考えました。
また、データ削除後のリダイレクト先は、投稿一覧ページにしようと「indexアクション」にも手を加えました。
しかし、削除機能追加後にサーバーを起動しようとしたら、
ActiveRecord::RecordNotFound in TodolistsController#show Couldn't find List with 'id'=1 Extracted source (around line #21): 19 20 21 22 23 24 def show @list = List.find(params[:id]) end def edit
という表示がされてしまいました。
色んなサイトを調べ、実行してみましたが結局分からず・・・。
誠に勝手ながら、分かる方がいらっしゃいましたら、助言の方いただきたいです。
**todo lists_controller.rb** class TodolistsController < ApplicationController def new @list = List.new end def create list = List.new(list_params) list.save redirect_to todolist_path(list.id) end def index @lists = List.all(params[:id]) end def show @list = List.find(params[:id]) end def edit @list = List.find(params[:id]) end def update list = List.find(params[:id]) list.update(list_params) redirect_to todolist_path(list.id) end def destroy list = List.find(params[:id]) list.destroy(list_params) redirect_to todolists_path(list.id) end private def list_params params.require(:list).permit(:title, :body, :image) end end
**index.html.erb** <h1>投稿一覧</h1> <% @lists.each do |list| %> <p>タイトル</p> <span> <%=link_to list.title, todolist_path(list.id) %> </span> <p>画像</p> <%= attachment_image_tag list, :image, :fill, 100, 100, format: 'jpeg' %> <% end %>
**show.html.erb** <h2>タイトル</h2> <p><%= @list.title %></p> <h2>本文</h2> <p><%= @list.body %></p> <h2>画像</h2> <%= attachment_image_tag @list, :image, :fill, 300, 300, format: 'jpeg' %> <%= link_to "編集", edit_todolist_path(@list.id) %> <%= link_to "削除", destroy_todolist_path(@list.id), method: :delete, "data-confirm" => "本当に削除しますか?" %>
**routes.rb** Rails.application.routes.draw do get 'todolists/new' # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html get "top" => "homes#top" post 'todolists' => 'todolists#create' get "todolists" => "todolists#index" get 'todolists/:id' => 'todolists#show', as: 'todolist' get "todolist/:id/edit" => "todolists#edit", as: "edit_todolist" patch "todolists/:id" => "todolists#update", as: "update_todolist" delete "todolists/:id" =>"todolists#destroy", as: "destroy_todolist" end
起動時にでたエラーですか?
indexでlinkをclickした時にでたエラーですか?
List.all(params[:id]) このparams[:id] は どういう効果を期待していますか
返事が遅れてしまい、すみません。
上記のエラーは、サーバーを起動し、ページを実際に開いた際に出てきたものです。
「List.all(params[:id])」の件は、私自身の不勉強で大変恥ずかしのですが、色々と考えた末に、データ削除後に投稿一覧のページに戻したいのなら、「indexアクション」にも「params[:id]」を入れた方がいいのでは?という考えに何故か至り導入しました。
1)index で表示
2)一覧の,Todolist 毎のlinkをclick
1)は成功、2)でエラーですね?
はい、それで間違いありません
困った、とするとわからん、
indexで <%=link_to list.title, todolist_path(list.id) %> が破綻していない
ということは list はある。
ということは list.idは実在のid、
なのに List.find(params[:id]) では無いと言われる。
解決することができました。
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー