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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

858閲覧

削除するデータがない状態で削除すると`No route matches [DELETE] `というエラーが出る

eminA

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/06/20 23:26

前提・実現したいこと

データを全て削除したあとに、もう一度削除をクリックしても何も起こらない又はrootに遷移する。
を実装したいです。

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

Routing Error No route matches [DELETE] "/scores"

該当のソースコード

ルーティング

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "scores#index" 4 resources :scores 5end

コントローラー

ruby

1class ScoresController < ApplicationController 2 before_action :authenticate_user! 3 4 5 def index 6 @score = Score.new 7 @scores = current_user.scores.order("created_at DESC") 8 @chart = current_user.scores.pluck(:created_at, :score) 9 end 10 11 def create 12 @score = Score.new(scores_params) 13 if @score.save 14 redirect_to root_path 15 else 16 render :index 17 end 18 end 19 20 21 def destroy 22 if params[:all].present? 23 @score = Score.where(params[:id]) 24 current_user.scores.destroy_all 25 else 26 @score = Score.find(params[:id]) 27 @score.destroy 28 end 29 redirect_to root_path 30 end 31 32 private 33 34 def scores_params 35 params.require(:score).permit(:score).merge(user_id: current_user.id) 36 end 37end

ビュー

ruby

1<div class="sccore_destroy"> 2 <%= link_to "一番新しいスコアを削除", score_path(@scores.ids, @scores.ids), method: :delete %> 3 <%= link_to "全てのスコアを削除", score_path(@scores.ids, all: true), method: :delete %> 4</div>

試したこと

def destroyredirect_to root_pathredirect_to root_path, states: 303として追記
二重deleteが発生しているという記事を見て記述してみました。
redirect_to root_pathを条件分岐に個別に記述してみました。

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

ruby 2.6.5
rails 6.0.4
mysql
rails routes

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

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

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

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

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

guest

回答1

0

ベストアンサー

<div class="sccore_destroy"> 全体を if でくるんで
「@scoresが空だったら削除ボタンをださない」ようにするのがよいでは

投稿2021/06/20 23:38

winterboum

総合スコア23403

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

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

eminA

2021/06/21 01:21

また回答頂けて光栄です! `<% if @scores.blank? %>`と記述したところボタンそのものが表示されなくなったので` if `を` unless `にしたところデータがない場合ボタンそのものが表示されなくなり実装ができました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問