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

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

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

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

Q&A

解決済

3回答

3981閲覧

deleteでのRouting Error

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2019/09/12 07:27

編集2019/09/12 08:50

resourcesでルーティングを設定した所エラーになりました。

delete後に/booksの一覧ページ(index.html.erb)へ飛ぶようにしたいのですがうまくいきません。

以下エラー文とコードになります。

**Routing Error No route matches [DELETE] "/books.1" Rails.root: /home/ec2-user/environment/Bookers** Application Trace | Framework Trace | Full Trace Routes Routes match in priority from top to bottom Helper HTTP Verb Path Controller#Action root_path GET / top#top blogs_path GET /blogs(.:format) blogs#index POST /blogs(.:format) blogs#create new_blog_path GET /blogs/new(.:format) blogs#new edit_blog_path GET /blogs/:id/edit(.:format) blogs#edit blog_path GET /blogs/:id(.:format) blogs#show PATCH /blogs/:id(.:format) blogs#update PUT /blogs/:id(.:format) blogs#update DELETE /blogs/:id(.:format) blogs#destroy>

controller

class BlogsController < ApplicationController def index @books = Book.all @book = Book.new end def create book = Book.new(book_params) book.save redirect_to books_path(book.id) end def show @book = Book.find(params[:id]) end def edit @book = Book.find(params[:id]) end def destroy book = Book.find(params[:id]) book.destroy redirect_to books_path end private def book_params params.require(:book).permit(:title, :body) end end

routes

Rails.application.routes.draw do get root 'top#top' resources :blogs # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end

index.html.erb

<h1>Books</h1> <table> <thead> <tr> <th>Title</th> <th>Body</th> <th colspan="2"></th> </tr> </thead> <tbody> <% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.body %></td> <td><%= link_to 'Show', blog_path %></td> <td><%= link_to 'Edit', edit_book_path(book.id) %></td> <td><%= link_to 'Destroy', blogs_path(book.id), method: :delete, "data-confirm" => "本当に削除しますか?" %></td> </tr> <% end %> </tbody> </table> <h1>New book</h1> <%= form_for(@book) do |f| %> <h4>Title</h4> <%= f.text_field :title %> <h4>Body</h4> <%= f.text_area :body %> <%= f.submit 'Create Book' %> <% end %>

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

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

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

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

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

winterboum

2019/09/12 08:31

ソースコードは画像ではなく、<code>を使ってテキストを貼り付けて下さい
Y.H.

2019/09/12 08:35

コードは画像ではなくテキストで質問に記載ください。
退会済みユーザー

退会済みユーザー

2019/09/12 08:51

申し訳ございません。 記述しましたのでご確認頂ければと思います。 宜しくお願い致します。
guest

回答3

0

ベストアンサー

resources :blogsではなくてresources :booksではないでしょうか?

本件とはあまり関係ないですが、個人的には、一度、scaffoldを利用してRailsのViewやControllerなどの作り方の基本となるソースコードを確認するといろいろと勉強になるかと思います。

https://web-camp.io/magazine/archives/16850


追記

Railsの基本理念の1つに「設定より規約」というものがあります。
よく「Railsはレールに乗ると、WEBアプリがすぐに作れる。」というのは、「Railsは規約に沿って作ると、WEBアプリがすぐ作れる。」ということです。

「レールに乗る」を簡単に実感する方法としては、上記でご紹介したscaffoldの利用です。
紹介したものはちょっと文章が長くて大変だと思うので、もっとわかりやすく説明します。

上記でご提示頂いた内容は、下記①のわずか「2行」でほとんどの機能を実装できます。


※できればテスト用の新しいアプリを作る
①ターミナル(Windowsだとコマンド?)で、下記コードを実行
rails generate scaffold article title:string body:text
rails db:migrate

http://localhost:3000/articlesを表示

③New Articleをクリックして、タイトルとボディを入力してSave

④Backで一覧ページにもどる。Editで編集する。Destroyで削除する。

⑤Articlesのcontorollerやviewのソースをみて勉強する。

⑥終わったら下記のコードでもとに戻す。
rails destroy scaffold article
rails db:rollback


これは逆に言うとルールをきちんと守らないと、やりたいことを実現するのが非常に難しくなってしまいます。
これは、ルールを守ることで、Railsに隠された色々な仕組みを利用しているためです。
Railsはルールに則らないWEBアプリを作ると、とたんにレベルが上がるといわれるのはそのせいだと思います。


注意してほしいのは、scaffoldができるから、Railsを理解しているということではありません。
scaffoldでどんなファイルを作っているのか、routesにはresourceとあるが、これは何を意味しているのか?などを一つ一つ学んでいくことでRailsやWebアプリに関する知識が深まっていくと思います。

個人的には、最初はscaffoldでRailsの標準的なやり方を学んで、Railsの素晴らしさを知ってから、どんどん壁にぶつかって深く理解していくことが良いのではないかと思っています。
僕もまだまだ初心者なので、偉そうなことは言えないですが…


ということで、今回コメント頂いたルールはこちらです。

RailsGuide:Active Recordの命名ルール

RailsGuide:コントローラの命名ルール

投稿2019/09/12 13:56

編集2019/09/12 23:16
no1knows

総合スコア3365

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

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

winterboum

2019/09/12 14:00

ああ、それですね。気が付かなかった。 かつ link_to 'Destroy', book_path(book.id), method: :delete,
退会済みユーザー

退会済みユーザー

2019/09/12 16:40

ご回答頂きありがとうございます! ですが同じエラーが出てしまいました。 また、今回を作成する際、モデル名がbook、コントローラー名がblogsとなっています。 どちらもbookにしようと考えていたところ間違えてしまったのですが、支障が出るのでしょうか?
guest

0

link_to 'Destroy', blogs_path(book.id), method: :delete,

link_to 'Destroy', blog_path(book.id), method: :delete,

rails では単数形と複数形で意味が変わります。

投稿2019/09/12 09:39

winterboum

総合スコア23549

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

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

退会済みユーザー

退会済みユーザー

2019/09/12 11:52 編集

ご回答頂きありがとうございます! やり直してみましたが、同じエラーになってしまいました。
winterboum

2019/09/12 13:56

No route matches [DELETE] "/books.1" の部分も変化なしですか?
guest

0

お二方ともご回答頂きありがとうございました。
とても参考になりました。

コントローラー名を「books」に修正し、以下のように書き直しました。

routes.rb

1resources :blogs 2 34 5resources :books

index.html.erb

1link_to 'Show', blog_path 2 34 5link_to 'Show', book_path(book.id)

index.html.erb

1link_to 'Destroy', blogs_path(book.id), method: :delete, 2 34 5link_to 'Destroy', book_path(book.id), method: :delete,

投稿2019/09/13 05:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問