空欄でデータが送られたときにエラーメッセージを出力する
ruby on rails の勉強をし始めて二週間程度の初学者です。今回indexとnewを同じ画面で表示するという課題をやっているのですが、うまくできません。
具体的にはデータが空で送られたときにデータを保存しないようにモデルの設定はできたのですが、エラーメッセージがどうしても出力されません。
わかりづらいかもしれませんがよろしくお願いいたします。
発生している問題・エラーメッセージ
NoMethodError in Books#create undefined method `each' for nil:NilClass
books_controller.rb
class BooksController < ApplicationController def index @book = Book.new @books = Book.all end def show @book = Book.find(params[:id]) end def edit @book = Book.find(params[:id]) end def home end def create book = Book.new(book_params) book.save # 保存失敗して if book.id == nil @book = Book.new @books = Book.all render 'index' else redirect_to book_path(book.id) end end def destroy book = Book.find(params[:id]) book.destroy redirect_to books_path end def update book = Book.find(params[:id]) book.update(book_params) redirect_to book_path(book) end private def book_params params.require(:book).permit(:title, :body) end end
index.html.rb
<h1>Books</h1> <table> <thead> <tr> <th>Title</th> <th>Body</th> <th></th> </tr> </thead> <tbody> <% @books.each do |post| %> <tr> <td> <%= post.title %> </td> <td> <%= post.body %> </td> <td> <%= link_to "Show", book_path(post.id) %> </td> <td> <%= link_to "Edit", edit_book_path(post.id) %> </td> <td> <%= link_to "Destroy", book_path(post.id), method: :delete, "data-confirm" => "Are you sure?" %> </td> </tr> <% end %> </tbody> </table> <h2>New book</h2> <!-- form_for部分 --> <%= form_for(@book) do |f| %> <h5>Title</h5> <%= f.text_field :title %> <h5>Body</h5> <%= f.text_area :body %> <br><%= f.submit 'Create Book' %></br> <% end %> <% @book.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %>
試したこと
おそらく@booksと@bookがnilだと思い、books_controller.rbに@book = Book.newと@books = Book.allを追加しましたが、レンダーされるだけでエラー文の表示には至りませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/05 07:05
2020/07/05 07:42
2020/07/08 09:45