簡易的なブログサイトを製作しています。そのなかで、投稿欄の片方にしか、入力されなかった際にエラーメッセージを出力したいのですが、その際に出力させるページを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 と表示されます
ruby
1books_controller.rb 2 3class BooksController < ApplicationController 4 5 def top 6 end 7 8 def index 9 @books = Book.all 10 end 11 12 def show 13 @book = Book.find(params[:id]) 14 end 15 16 def new 17 @book = Book.new 18 end 19 20 def create 21 @book = Book.new(book_params) 22 if @book.save 23 flash[:notice] ="Book was successfully created." 24 redirect_to book_path(@book) 25 else 26 render "new" 27 end 28 end 29 def edit 30 @book = Book.find(params[:id]) 31 end 32 33 def update 34 @book = Book.find(params[:id]) 35 if @book.update(book_params) 36 flash[:notify] = "Book was successfully updated." 37 redirect_to book_path(@book) 38 else 39 render "index" 40 end 41 end 42 43 def destroy 44 @book = Book.find(params[:id]) 45 @book.destroy 46 if @book.destroy 47 flash[:message] = "Book was successfully destroyed." 48 redirect_to books_path 49 end 50 end 51 private 52 def book_params 53 params.permit(:title, :body) 54 end 55end 56
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 <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>
config.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
プレビュー