質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

1回答

82閲覧

Rails7.2で削除処理が実行できない

tetu8370

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2024/10/26 00:40

実現したいこと

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

【削除ボタンクリック】
http://127.0.0.1:3000/lists?data%5Bconfirm%5D=%E6%9C%AC%E5%BD%93%E3%81%AB%E5%89%8A%E9%99%A4%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F&method=delete

補足

【バージョン】
ruby3.3.5
rails7.2.1.2
M2 macbook air
vscode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

method: :deleteという書き方は、従来のrails-ujs向けのものです。一方で、Rails 7以上ではTurboというライブラリが標準となっています。

どちらで行くかを決めて、それに合わせた書き方を採用してください。

投稿2024/10/26 03:35

maisumakun

総合スコア145930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tetu8370

2024/10/26 06:56

ご回答ありがとうございました。 railsの知識が浅く、Turboのことも知らなかったため、大変参考になりました。 今後はTurboを使用する方向で学習を行なっていこうと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問