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

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

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

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

Q&A

解決済

2回答

4262閲覧

削除機能でのエラー No route matches [DELETE] "/books"

YuhiUsui

総合スコア11

Ruby on Rails

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

0グッド

0クリップ

投稿2020/03/16 09:43

前提・実現したいこと

rails 初心者です
読んだ本の感想を投稿するサイト
モデル :Book
削除機能の実装

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

Routing Error No route matches [DELETE] "/books" 削除リンククリックした際にエラーが出ます HTTPメソッド指定もdeleteなのですが、、、

該当のソースコード

rails

1<h3>Books</h3> 2 3<table> 4 <thead> 5 <tr> 6 <th>title</th> 7 <th>body</th> 8 <th></th> 9 </tr> 10 </thead> 11 <tbody> 12 <% @books.each do |book| %> 13 <tr> 14 <td><%= book.title %></td> 15 <td><%= book.body %></td> 16 <td><%= link_to "show", book_path(book) %></td> 17 <td><%= link_to "edit", edit_book_path(book) %></td> 18 <td><%= link_to "destroy", books_path, method: :delete %></td>  >ここをクリックするとエラーが出ます。 19 </tr> 20 <% end %> 21 </tbody> 22</table> 23 24<h3>New book</h3> 25<% if @book.errors.any? %> 26 <ul> 27 <% @book.errors.full_messages.each do |message| %> 28 <li><%= message %></li> 29 <% end %> 30 </ul> 31<% end %> 32<%= form_for(@book) do |f| %> 33 34 <%= f.label :Title %><br> 35 <%= f.text_field :title %><br> 36 37 <%= f.label :Body %><br> 38 <%= f.text_area :body %> 39 40 <br><%= f.submit 'Create Book' %> 41 42<% end %> 43 44 45 46Rails.application.routes.draw do 47 root 'books#top' 48 get 'books' =>'books#index' 49 post 'books' => 'books#create' 50 get 'books/:id' => 'books#show', as: 'book' 51 get 'books/:id/edit' => 'books#edit', as: 'edit_book' 52 patch 'books/:id' => 'books#update', as: 'update_book' 53 put 'books/:id' => 'books#update' 54 delete 'books/:id' => 'books#destroy' 55end 56 57class BooksController < ApplicationController 58 def index 59 @books = Book.all 60 @book = Book.new 61 end 62 63 def show 64 @book = Book.find(params[:id]) 65 end 66 67 def create 68 book = Book.new(book_params) 69 book.save 70 redirect_to book_path(book.id) 71 end 72 73 def edit 74 @book = Book.find(params[:id]) 75 end 76 77 def update 78 book = Book.find(params[:id]) 79 book.update(book_params) 80 redirect_to book_path(book) 81 end 82 83 def destroy 84 @book = Book.find(params[:id]) 85 @book.destroy 86 redirect_to books_path 87 end 88 89 private 90 def book_params 91 params.require(:book).permit(:title, :body) 92 end 93end

試したこと

同様のエラー質問の確認
変数ミス無いか確認
googleにて検索

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

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

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

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

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

guest

回答2

0

ベストアンサー

erb

1<td><%= link_to "destroy", book_path(book), method: :delete %></td>

だと思われます。


books_pathはBook全体のパスです。book_path(book)はBook一つだけのパスです。削除するのは全体ではなく、Book一つだけですので、book_path(book)のようにしなくてはいけません。

投稿2020/03/16 13:24

raccy

総合スコア21733

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

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

0

ルーティングがdelete 'books/:id'となっていますので、/books/2のような形である必要があります。

投稿2020/03/16 10:01

編集2020/03/16 10:01
maisumakun

総合スコア145121

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問