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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

466閲覧

パスがあっているはずなのにNoMethodErrorになる

kuro-to

総合スコア2

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2022/10/20 15:24

前提

ruby初学者です。初投稿失礼します。
Ruby on railsで本の感想を投稿するアプリを制作中なのですが、ひとまずアプリの大枠はでき、ページの遷移ができるか確認していました。そこで、感想の一覧と新規投稿を同時にできるページにアクセスしたところ下記のエラーが発生しました
イメージ説明
個々にURLを打ち込んでページにアクセスすると通常通りページが表示されるので、urlの指定の仕方が悪いと思われるのですが、原因がわかりません。
rails routesでurlを確認したところprefixはedit_bookでURIは/books/:id/edit(.:format)となっており問題があるようには思えませんでしたので、念のため他のViewsファイルのコードも添付しておきます。

実現したいこと

レイアウトは後に変更するので、ページの表示とlinkをクリックしたときに正しくページが遷移するようにしたい

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

NoMethodError in Books#index Showing /home/ec2-user/environment/bookers/app/views/books/index.html.erb where line #13 raised: undefined method `edit_books_path' for #<ActionView::Base:0x00000000012c78> Did you mean? edit_book_path Extracted source (around line #13): 11 12 13 14 15 16 <td><%= f.body%></td> <td><%= link_to "Show", books_path(@book.id) %></td> <td><%= link_to 'Edit', edit_books_path(@book.id) %></td> <td><%= link_to "Destroy", books_path(@book.id), method: :delete, "data-comfirm" => "本当に削除しますか?" %></td> <% end %> <tr>

該当のソースコード

books_Controller.rb

1class BooksController < ApplicationController 2 def new 3 end 4 5 def create 6 @book = Book.new(book_params) 7 @book.save 8 9 redirect_to '/books' 10 end 11 12 def index 13 @books = Book.all 14 @book = Book.new 15 end 16 17 def show 18 @book = Book.find(params[:id]) 19 end 20 21 def edit 22 @book = Book.find(params[:id]) 23 end 24 25 private 26 def book_params 27 params.require(:book).permit(:title, :body) 28 end 29end 30

index.html.erb

1<body class="index-body"> 2 <h1>Books</h1> 3 4 <h6 class="index-title">Title</h6> 5 <h6 class="index-body">Body</h6> 6 7 <div class="index-main"> 8 <tr class="book-tables"> 9 <%= @books.each do |f| %> 10 <td><%= f.title %></td> 11 <td><%= f.body%></td> 12 <td><%= link_to "Show", books_path(@book.id) %></td> 13 <td><%= link_to 'Edit', edit_books_path(@book.id) %></td> 14 <td><%= link_to "Destroy", books_path(@book.id), method: :delete, "data-comfirm" => "本当に削除しますか?" %></td> 15 <% end %> 16 <tr> 17 </div>

show.html.erb

1<h6>Title: <%= @book.title %></h6> 2<h6>Body: <%= @book.body %></h6> 3 4<p><%= link_to "Edit", edit_books_path(@book.id)%> | <%=link_to 'Back', url: '/books' %></p> 5

edit.html.erb

1<h1>Editing Book</h1> 2 3<%= form_with model: @book, url: books_path(@book.id), method: :patch do |f| %> 4 5 <p>Title</p> 6 <%= f.text_field :title %> 7 8 <p>Boby</p> 9 <%= f.text_area :body %> 10 11 <%= f.submit 'Update Book' %> 12 13<% end %> 14 15<p><%= link_to "Show", books_path(@book.id) %> | <%=link_to 'Back', url: '/books' %></p>

試したこと

urlを"/books/#{@book.id}/edit"に変更するとindexのページは表示できるのですが、EditのURLに飛ぼうとするとid=editになっているといった旨のエラーになります。
pathをedit_book_path(@book.id)と単数形にしてみるとNo routeのエラーが発生しました。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

maisumakun

2022/10/20 22:14

routes.rbにはどのように書いていますか?
guest

回答1

0

自己解決

申し訳ございません。ほかの方の質問を参考にいちからコードを書きなおしたところうまくいきました。

投稿2022/10/21 13:06

kuro-to

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問