質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

2178閲覧

一覧と投稿機能が同じページのバリデーションのエラーメッセージを表示したい。

koma0521

総合スコア1

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2020/08/04 08:30

前提・実現したいこと

Railsで一覧表示と新規作成を同じページにおいています。
バリデーションの空でないことを検証するpresence: trueのエラーメッセージを表示したいのですがエラーが出ます。バリデーションに引っかない新規作成はエラーが出ません。
プログラミングの勉強をして1週間位です。

発生している問題・エラーメッセージ

NoMethodError in Books#create undefined method `each' for nil:NilClass Extracted source (around line #7): 5 <th>Body</th> 6</tr> 7<% @books.each do |book| %> <tr> <td><%= book.title %></td> <td><%= book.body %></td>

該当のソースコード

html

1<h2>Books</h2> 2<table> 3<tr> 4 <th>Title</th> 5 <th>Body</th> 6</tr> 7<% @books.each do |book| %> 8 <tr> 9 <td><%= book.title %></td> 10 <td><%= book.body %></td> 11 <td><%= link_to 'Show',book_path(book)%></td> 12 <td><%= link_to 'Edit',edit_book_path(book)%></td> 13 <td><%= link_to 'Destroy',book_path(book),method: :delete,data:{confirm: "Are you sure?"} %></td> 14 </tr> 15<% end %> 16 17</table> 18 19<h2>New book</h2> 20<%= form_for @book do |f|%> 21 22 <div class="field"> 23 <%= f.label :title%><br> 24 <%= f.text_field :title%> 25 </div> 26 <div class="field"> 27 <%= f.label :body%><br> 28 <%= f.text_area :body%> 29 <div> 30 <%= f.submit 'Create Book'%> 31<% end %>

ruby

1 def index 2 @books = Book.all.order(id: :asc) 3 @book = Book.new 4 end 5 6 def create 7 book = Book.new(book_params) 8 if book.save 9 redirect_to books_path,notice: 'Book was successfully created.' 10 else 11 render :index 12 end 13 end

補足情報(FW/ツールのバージョンなど)

Rails 5.2.4.3
ruby 2.5.7
プログラミング勉強をして1週間位です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

saveに失敗すると indexのviewに行きますが、ここで必要な @booksが定義していないからです。
@books = Book.all.order(id: :asc)
を入れて。
なお、
book = Book.new(book_params)
のbookは @book にしないと、viewの新規登録画面のところでエラーになります。

投稿2020/08/04 11:16

winterboum

総合スコア23403

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koma0521

2020/08/04 22:10

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問