作成した投稿アプリケーションの仕様上、
「空欄で投稿したときに、値は保持したままで、入力フォームに戻ってくる」
という仕様がありました。
これの再現方法について
def create
@prototype = Prototype.new(prototype_params)
if @prototype.save
redirect_to root_path
else
render action: :new
end
end
いきなり結論、これでいけました。
順に解説
@prototype = Prototype.new(prototype_params)
ここで@prototypeというインスタンス変数に.newメソッドで生成した値を入れておきます。
if @prototype.save
redirect_to root_path
else
render action: :new
これで.saveメソッドが実行された時はroot pathに戻されますが、そうではない時はrenderアクションでnewメソッドに戻ります。
つまり大事なのが、redirectとrenderの違い。
renderはインスタンス変数の値はそのままです。
そう、newメソッドに戻った時の@prototypeの値を引き継ぎます。
逆に、redirectは値を引き継がず、ページ遷移するだけです。
基本的な動作ですが、画面遷移を伴う場合、インスタンス変数が現在どの値になっているのかは正確に把握する必要がありますね。