前提・実現したいこと
railsにて本の感想アプリを作成しています。
投稿機能と一覧機能を同画面に表示させ、さらにバリデーションを付けたところデータが空白な場合エラーが発生してしまいました。解決法やソースコードをご教授いただきたいです
発生している問題・エラーメッセージ
NoMethodError in Books#create
Showing /home/ec2-user/environment/bookers/app/views/books/index.html.erb where line #13 raised:
undefined method `each' for nil:NilClass
該当のソースコード
#コントローラ
class BooksController < ApplicationController
def top
end
def index
@books = Book.all
@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.id) #セーブできた時
else
render :index
end
end
def show
@book = Book.find(params[:id])
end
def edit
@book = Book.find(params[:id])
end
def update book = Book.find(params[:id])
if book.update(book_params)
flash[:notice] = "Book was successfully updated."
redirect_to book_path(book.id)
else
render :show
end
end
def destroy
book = Book.find(params[:id])
book.destroy
flash[:notice] = "Book was successfully destroyed."
redirect_to books_path
end
private
def book_params
params.require(:book).permit(:title, :body)
end
end
#index.html.erb
<h1>Books index</h1> <table> <thead> <tr> <th>Title</th> <th>Body</th> <th colspan="3"></th> </tr> </thead><h2>New book</h2><tbody> <% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.body %></td> <td><%= link_to "Show", book_path(book) %></td> <td><%= link_to "Edit", edit_book_path(book) %></td> <td><%= link_to "Destroy", book_path(book), method: :delete, "data-confirm" => "Are you sure?" %></td> </tr> <% end %> </tbody> </table>
<%= form_with model:@book, url:'/books', local:true do |f| %>
<% if @book.errors.any? %>
<%= @book.errors.count %> prohibited this book from being saved: %>
<ul>
<% @book.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<label for="book_title">title</label>
<%= f.text_field :title %>
<label for="book_body">body</label>
<%= f.text_area :body %>
<%= f.submit '投稿' %>
<% end %>
#バリデーション
class Book < ApplicationRecord
validates :title, presence: true
validates :body, presence: true
end
試したこと
いろいろと試したのですができませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/21 03:58