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

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

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

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

Q&A

1回答

139閲覧

ユーザーが持つexerciseを削除する機能

stmaho

総合スコア1

Ruby on Rails 5

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

0グッド

0クリップ

投稿2023/05/18 13:34

編集2023/05/19 16:24

実現したいこと

ユーザーが持つexercise(複数の動画URL)を詳細ページから一括削除を行いたい

前提

ユーザーを新規登録し、URLを選択して保存
詳細ページで保存されたURLが一覧となって表示される
このページで保存されているURLを一括削除を行いたい。

発生している問題・エラーメッセージ

The action 'show' could not be found for ExercisesController

該当のソースコード

users/show.html.erb

1<h1>ID:<%="#{@user.patient_id}"%>さんのマイページ</h1> 2 <%= link_to "logout", destroy_user_session_path, method: :delete, class: "nav-send" %> 3 <%= link_to "登録画面", exercises_path(current_user.id), class: "nav-send" %> 4 <%= link_to "削除", exercise_path(@exercises), method: :delete, class: "nav-send"%> 5 6 7<div class="UrlIndex"> 8 <div class="exercises"> 9 <% @exercises.each do |exercise| %> 10 <iframe src=<%= exercise.url1 %>></iframe> 11 <iframe src=<%= exercise.url2 %>></iframe> 12 <iframe src=<%= exercise.url3 %>></iframe> 13 <iframe src=<%= exercise.url4 %>></iframe> 14 <% end %> 15 16 </div> 17</div> 18 <div class="qrblock"> 19 <button id="getqrInfo" class="btn btn-default">QRコードを生成</button> 20 21 <div id="qrOutput"> 22 <div><img id="newImg"></div> 23 </div> 24 </div>

users.contoroller.rb

1class UsersController < ApplicationController 2 before_action :authenticate_user!, only: :show 3 def show 4 @user = User.find(params[:id]) 5 @exercises = @user.exercises 6 end 7 end

exercise_contoroller.rb

1class ExercisesController < ApplicationController 2 before_action :authenticate_user!, only: :index 3 4 def index 5 @exercise = Exercise.new 6 end 7 8 def create 9 @exercise = Exercise.new(exercise_params) 10 if @exercise.save 11 redirect_to user_path(current_user.id), notice: "Exercises created successfully" 12 else 13 redirect_to exercises_path(current_user.id) 14 end 15 end 16 17 def destroy 18 @user = User.find(params[:id]) 19 @exercises = @user.exercises 20 if @exercises.destroy 21 redirect_to exercises_path(current_user.id) 22 end 23 end 24 25 private 26 def exercise_params 27 params.require(:exercise).permit(:url1, :url2, :url3, :url4).merge(user_id: current_user.id) 28 end 29 30end

ruoute.rb

1Rails.application.routes.draw do 2 devise_for :users, controllers: { 3 registrations: 'users/registrations', 4 sessions: 'users/sessions' 5 } 6 unauthenticated do 7 as :user do 8 root :to => 'devise/registrations#new' 9 end 10 end 11 12 authenticated :user do 13 root :to => 'users#show', as: :authenticated_root 14 end 15 16 resources :exercises 17 resources :users 18end 19

試したこと

userコントローラー内にdestroyを書いてみたり、

show.html.erb

1<%= link_to "削除", exercise_path(@exercises), method: :delete, class: "nav-send"%>

ここのパスをuser_pathとしてみたりしましたが、もちろんエラー
次に何に修正を入れればいいのか打つ手がありません。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

stmaho

2023/05/19 04:46

ありがとうございます。 route.rb,を追加しました! よろしくお願いします。
guest

回答1

0

link で method: :delete としても、GET で飛んでしまい action show を探しに行ってしまいます。
これを DELETE で飛ぶようにするには js の設定が必要です。
うまく行かないときの最後の手段として link_to でなく button_to を使うてもあります。

(jquery-ujs)が必要だったかな。 Rails5 link_to method: :delete で調べてみると色々出てくると思います。
Rails 5,6,7で変わってくるので Rails versionに注意して調べて下さい

投稿2023/05/19 07:24

winterboum

総合スコア23282

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問