お世話になっております。
ポートフォリオ用に育児記録アプリを制作中なのですが、link_toで作成した削除ボタンをクリックしてもデータ削除ができません。
Rails7使用中なのでturboメソッドにてlink_toの削除ボタンを設定したつもりでしたが、コンソール上では変わらずshowアクションのビューにレンダリングされてしまっています。
途中経過としてRSpecでCRUD機能をテストした際にはテストをパスできており、手動でのCRUD機能の確認時でも削除ができている状況でした。
しかし現時点で改めて手動にて動作確認したところ、削除できず原因も未だ特定できていません。
類似する質問内容も確認しましたが解決できず、どうかご助力願いたいです。
よろしくお願いいたします。
実現したいこと
- link_toで作成した削除ボタンから削除できるようにしたい
前提
育児記録アプリ制作中に、link_toで作成した削除ボタンが機能していないことが発覚しました。
複数モデルのCRUD機能を実装しているので全てのモデルについて確認しましたが、全てdeleteではなくshowアクションのビューへとレンダリングしてしまっています。
deleteメソッドではなくgetメソッドが適用されているせいで削除できないことまでは理解できるのですが、どのようにすれば削除ボタンとして機能させられるのか、という部分の理解及ばず自力での対応が難しいのが現状です。
発生している問題・エラーメッセージ
Started GET "/milks/2" for ::1 at 2023-09-22 14:46:56 +0900 Processing by MilksController#show as HTML Parameters: {"id"=>"2"} User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ app/controllers/application_controller.rb:8:in `current_user' CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ app/controllers/application_controller.rb:8:in `current_user' Milk Load (0.2ms) SELECT "milks".* FROM "milks" WHERE "milks"."user_id" = $1 AND "milks"."id" = $2 LIMIT $3 [["user_id", 1], ["id", 2], ["LIMIT", 1]] ↳ app/controllers/milks_controller.rb:91:in `set_milk' Rendering layout layouts/application.html.slim Rendering milks/show.html.slim within layouts/application Rendered milks/show.html.slim within layouts/application (Duration: 16.7ms | Allocations: 12511) CACHE User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ app/controllers/application_controller.rb:8:in `current_user' Rendered layout layouts/application.html.slim (Duration: 25.7ms | Allocations: 19333) Completed 200 OK in 34ms (Views: 26.4ms | ActiveRecord: 0.7ms | Allocations: 21801)
該当のソースコード
milks_controller.rb
1before_action :set_milk, only: [:show, :edit, :update, :destroy] 2 3def set_milk 4 @milk = current_user.milks.find(params[:id]) 5end 6 7def destroy 8 @milk.destroy 9 redirect_to milks_path, notice: '削除完了しました' 10end
index.html.slim
1table.table.table-hover 2 thead.thead-default 3 tr 4 th = sort_link(@q, :kind, default_order: :desc) 5 th = Milk.human_attribute_name(:amount) 6 th = Milk.human_attribute_name(:time) 7 th = Milk.human_attribute_name(:memo) 8 th = Milk.human_attribute_name(:created_at) 9 th 10 11 tbody 12 - @milks.each do |milk| 13 tr 14 td = link_to milk.human_attribute_enum(:kind), milk_path(milk) 15 td = milk.amount 16 td = l milk.time 17 td = milk.memo 18 td = l milk.created_at 19 td 20 = link_to '編集', edit_milk_path(milk), class:'btn btn-primary mr-3' 21 = link_to '削除', milk_path(milk), data: { turbo_method: :delete, turbo_confirm: '本当に削除しますか?'}, class: 'btn btn-danger'
application_controller.rb
1class ApplicationController < ActionController::Base 2 helper_method :current_user 3 before_action :login_required 4 5 private 6 7 def current_user 8 current_user ||= User.find_by(id: session[:user_id]) if session[:user_id] 9 end 10 11 def login_required 12 redirect_to login_path unless current_user 13 end 14 15end
application.html.slim
1doctype html 2html 3 head 4 title 5 | Coyell 6 meta[name="viewport" content="width=device-width,initial-scale=1"] 7 = csrf_meta_tags 8 = csp_meta_tag 9 = stylesheet_link_tag "application", "data-turbo-track": "reload" 10 = javascript_importmap_tags 11 12 <script src="https://code.highcharts.com/stock/highstock.js"></script> 13 <script src="https://code.highcharts.com/stock/modules/exporting.js"></script> 14 <script src="https://code.highcharts.com/maps/modules/map.js"></script> 15 16 17 body 18 .app-title.navbar.navbar-expand-md.navbar-light.bg-light 19 .navbar-brand = link_to 'Coyell', root_path 20 21 ul.navbar-nav.ml-auto 22 - if current_user 23 li.nav-item = link_to '記録一覧', summary_path, class: 'nav-link' 24 li.nav-item = link_to 'ユーザー一覧', admin_users_path, class: 'nav-link' 25 li.nav-item = link_to '子供一覧', children_path, class: 'nav-link' 26 li.nav-item = link_to 'ログアウト', logout_path, method: :delete, data: { turbo_method: :delete }, class: 'nav-link' 27 - else 28 li.nav-item = link_to 'ログイン', login_path, class: 'nav-link' 29 li.nav-item = link_to 'ユーザー登録', new_admin_user_path, class: 'nav-link' 30 31 .container 32 - if flash.notice.present? 33 .alert.alert-success = flash.notice 34 = yield
試したこと
・ログ上で記載のあった各ファイルのメソッド見直し
・Rails7でのturboメソッドの書き方の再確認
・誤字脱字のチェック
補足情報(FW/ツールのバージョンなど)
- Rails 7.0.6
- ruby 3.1.2p20
- MacOS Monterey バージョン12.6.4

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。