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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

2038閲覧

ruby on rails アクション内で、Postのインスタンスを定義する

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

1クリップ

投稿2019/01/06 22:01

ruby on railsに関して質問です。
現在、progateで学習しているのですが、以下の部分がよくわかっていません。テキストの下にコードを記載しています。
ご説明いただけるとありがたいです。
行いたいことは、createアクションの中で、@post.saveに失敗した際に、renderを用いて、newのビューに戻り、エラー文を表示することです。この時に、どうしてnewアクションの中で、@post=Post.newをしなければならないのかがよくわかりません。
@post=Post.find_by(id: params[:id])等を用いて、createアクション内で生成された@postのインスタンス変数を探し、その中に格納されたあエラー文を表示する。という考え方は間違っているのでしょうか??
間違っているからその先に進めないのですが(笑)、、、
自分の考え方がどうして間違っているのか納得したいです。よろしくお願いします。

class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new(content: params[:content])
if @post.save
flash[:notice] = "投稿を作成しました"
redirect_to("/posts/index")
else
render("posts/new")
end
end
end

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

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

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

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

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

guest

回答1

0

ベストアンサー

行いたいことは、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に失敗したときには、データベースにデータは入っていません。

投稿2019/01/07 00:15

編集2019/01/07 00:30
maisumakun

総合スコア145121

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

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

退会済みユーザー

退会済みユーザー

2019/01/07 00:46

ご回答ありがとうございます。 根本的すぎる問題でつまずいているのがよく分かりました、、 そこでもう一度お聞きしたいのですが、Post.newでインスタンスを作成をしないといけない理由は何なのでしょうか?私はそもそもインスタンスを理解しきれていません。ぜひ教えていただけると嬉しいです。
maisumakun

2019/01/07 00:59

Railsのフォーム生成には、「form_for」や「form_with」というヘルパーを使いますが、これらはモデルインスタンスを引数に取ります。 新規作成時と編集時で全く同じようにフォームを表示するため、新規作成時にもインスタンスを作って渡しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問