質問: "投稿を作成しました" redirect_to("/posts/index") else render("posts/new") end end end
回答: > > 行いたいことは、createアクションの中で、@post.saveに失敗した際に、renderを用いて、newのビューに戻り、エラー文を表示することです。この時に、どうしてnewアクションの中で、@post=Post.newをしなければならないのかがよくわかりません。 > > > `create`に失敗した場合、`new`アクションは**呼び出されません**。`create`内にある`render :new`は、`new`の**ビューを表示する**という意味で、`new`アクションは実行しません。 `new`アクションは、最初にフォームを表示するときのためのものです。ヘルパーなどを適切に動かすために、`Post.new`したインスタンスが必要となります。 (少し誤解があった回答) > > @post=Post.find_by(id: params[:id])等を用いて、createアクション内で生成された@postのインスタンス変数を探し、その中に格納されたあエラー文を表示する。という考え方は間違っているのでしょうか?? > > > はい。**新規作成**である以上、`@post.save`に失敗したときには、データベースにデータは入っていません。