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

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

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

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

Q&A

解決済

1回答

1627閲覧

[Rails]link_toの削除ボタンでデータ削除ができない

nanananan

総合スコア7

Ruby on Rails 7

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

0グッド

0クリップ

投稿2023/09/25 05:32

お世話になっております。

ポートフォリオ用に育児記録アプリを制作中なのですが、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

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

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

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

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

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

guest

回答1

0

自己解決

検証ツールを確認しながら削除ボタンを機能させるべく、下記参考サイトの方法を試してみました。

https://zenn.dev/komaken/articles/900566822a84b6

コンソール上で

bin/rails importmap:install
bin/rails turbo:install stimulus:install

をして再度手動にて動作確認したところ、下記のエラーメッセージが表示されました。

Multiple files with the same output path cannot be linked ("application.js")
In "/Users/hiroseshiho/coyell/app/assets/config/manifest.js" these files were linked:

というエラーメッセージが出て、application.jsファイルが別フォルダ内に2つ存在していることが確認されました。
試しにapp/assets/javascripts/application.jsの方を削除したところ、無事に動作するようになりました。

複数モデルでのデータ削除もできるか確認しましたがきちんと機能することの確認が取れたため、解決済みとさせていただきました。

投稿2023/09/25 05:55

nanananan

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問