前提
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー