実現したいこと
resourcesを使用したルーディングの書き方で、削除処理が正しく実行されるようにしたい
発生している問題・分からないこと
rails routesでルーティングを確認して、link_toを使用して削除リンクを作成したが、ボタンをクリックしたら削除ではなく詳細ページに遷移してしまう
該当のソースコード
root GET / homes#top top_page GET /top(.:format) homes#top lists GET /lists(.:format) lists#index POST /lists(.:format) lists#create new_list GET /lists/new(.:format) lists#new edit_list GET /lists/:id/edit(.:format) lists#edit list GET /lists/:id(.:format) lists#show PATCH /lists/:id(.:format) lists#update PUT /lists/:id(.:format) lists#update DELETE /lists/:id(.:format) lists#destroy
routes.rb
1Rails.application.routes.draw do 2 # ルートパスを HomesController の top アクションに設定 3 root "homes#top" 4 5 # /top へのルートを HomesController の top アクションに設定 6 get "top", to: "homes#top", as: :top_page 7 8 # ListsController のRESTfulルートを定義 9 resources :lists 10 11 # Health check 12 get "up", to: "rails/health#show", as: :rails_health_check 13 14 # PWAルート 15 get "service-worker", to: "rails/pwa#service_worker", as: :pwa_service_worker 16 get "manifest", to: "rails/pwa#manifest", as: :pwa_manifest 17end
lists_controller.rb
1class ListsController < ApplicationController 2 def index 3 @lists = List.all 4 end 5 6 def new 7 @list = List.new 8 end 9 10 def create 11 @list = List.new(list_params) 12 if @list.save 13 redirect_to lists_path 14 else 15 render :new 16 end 17 end 18 19 def edit 20 @list = List.find(params[:id]) 21 end 22 23 def show 24 @list = List.find(params[:id]) 25 end 26 27 def update 28 @list = List.find(params[:id]) 29 if @list.update(list_params) 30 redirect_to lists_path 31 else 32 render :edit 33 end 34 end 35 36 def destroy 37 @list = List.find(params[:id])# 削除するレコード1件取得 38 @list.destroy 39 redirect_to lists_path 40 end 41 42 43 private 44 45 def list_params 46 params.require(:list).permit(:title, :body, :image) 47 end 48end
index.html.erb
1<h1>投稿一覧</h1> 2 3<table> 4 <thead> 5 <tr> 6 <th>タイトル</th> 7 <th>内容</th> 8 <th>画像</th> 9 </tr> 10 </thead> 11 <tbody> 12 <% @lists.each do |list| %> 13 <tr> 14 <td><%= link_to list.title, list_path(list) %></td> 15 <td><%= truncate(list.body, length: 100) %></td> 16 <td> 17 <% if list.image.attached? %> 18 <%= image_tag list.image, size: "100x100" %> 19 <% else %> 20 <%= image_tag 'no_image', size: "100x100" %> 21 <% end %> 22 </td> 23 <td> 24 <%= link_to '編集', edit_list_path(list.id) %> 25 </td> 26 <td> 27 <%= link_to '削除', list_path(list.id), method: :delete, data: {confirm: "本当に削除しますか?"} %> 28 </td> 29 </tr> 30 <% end %> 31 </tbody> 32</table> 33 34<%= link_to '新規作成', new_list_path %>
show.html.erb
1<h1>詳細ページ</h1> 2 3<h2>Title</h2> 4<p><%= @list.title %></p> 5 6<h2>Body</h2> 7<p><%= @list.body %></p> 8 9<h2>画像</h2> 10<% if @list.image.attached? %> 11 <%= image_tag @list.image, size: "300x300" %> 12<% else %> 13 <%= image_tag 'no_image', size: "300x300" %> 14<% end %> 15 16<%= link_to '投稿一覧', lists_path %>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
・urlを明示的に記述する書き方を行うと、show.html.erbに遷移した
・ターミナルのログを確認したところ、deleteではなくgetの処理が呼ばれている
・urlを明示的に記述しないとshow.html.erbに遷移せず、urlが以下のように変わった。しかし、画面は変わらず、rails cでList.allを実行して確認したが削除は実行されていなかった
【削除ボタンクリック前】
http://127.0.0.1:3000/lists
補足
【バージョン】
ruby3.3.5
rails7.2.1.2
M2 macbook air
vscode
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/10/26 06:56