前提・実現したいこと
簡易的なブログサイトを製作しています。そのなかで、投稿欄の片方にしか、入力されなかった際にエラーメッセージを出力したいのですが、その際に出力させるページをindex.html.erbにしたいです。今の段階だと、new.html.erbに表示されています。、
発生している問題・エラーメッセージ
index.html.erbに表示させようとすると
エラーメッセージ
NoMethodError in Books#create
Showing /home/ec2-user/environment/bookers/app/views/books/index.html.erb where line #9 raised:
undefined method `each' for nil:NilClass
と表示されます
class BooksController < ApplicationController def top end def index @books = Book.all end def show @book = Book.find(params[:id]) end def new @book = Book.new end def create @book = Book.new(book_params) if @book.save flash[:notice] ="Book was successfully created." redirect_to book_path(@book) else render "new" end end def edit @book = Book.find(params[:id]) end def update @book = Book.find(params[:id]) if @book.update(book_params) flash[:notify] = "Book was successfully updated." redirect_to book_path(@book) else render "index" end end def destroy @book = Book.find(params[:id]) @book.destroy if @book.destroy flash[:message] = "Book was successfully destroyed." redirect_to books_path end end private def book_params params.permit(:title, :body) end end
***__*index.html.erb__** <h1>Books</h1> <div class = "wrapp"> <table> <tr> <td class = "data">Title</td> <td class = "data1">Body</td> </tr> <% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.body %></td> <td><%= link_to 'Show', book_path(book.id), method: :get %></td> <td><%= link_to 'Edit', book_path(book.id), method: :get %></td> <td><%= link_to 'destroy',book_path(book.id),method: :delete, data: {confirm:"Are you sure?"}%></td> </tr> <% end %> </table> <%= form_with model:@book, local:true do |f| %> <h1>New book</h1> <h4>Title</h4> <%= f.text_field :title %> <h4>Body</h4> <%= f.text_area :body %> <%= f.submit 'create book' %> <% end %> </div> **__new.html.erb**__ <%= form_with model:@book, local:true do |f| %> <% if @book.errors.any? %> <div class = "title"> <ul> <h3><span = class = "warn"><%= @book.errors.count %> error prohibited this book from being saved:</h3> <h3><% @book.errors.full_messages.each do |message| %></h3> <li><%= message %></li> <% end %> </ul> </div> <% end %> <% end %>
```**__routes.rb__** Rails.application.routes.draw do resources :books delete 'books/:id', to: 'books#destroy' **# For details on the DSL available within this file, see **http://guides.rubyonrails.org/routing.html root to: 'books#top' end
試したこと
books_controllerのcreateアクションのrenderをnewにすると、エラーメッセージは表示されるのですが、indexページ上で反映されません。(当たり前ですが。)。renderをindexにすると、エラーが起こるので、indexページに何か問題があるのは分かるのですが、具体的に何が問題なのかが分かりません。このエラーが3日間くらい解消されないので、ご教示いただきたいです。
補足情報(FW/ツールのバージョンなど)
cloud9で実装してます
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/10 12:18
2021/07/10 13:49 編集
2021/07/11 04:42
2021/07/11 05:20
2021/07/11 06:18
2021/07/11 06:55
2021/07/11 09:22