Ruby on Railsでform_withを使用してフォームを作成し、入力内容を送信した際、モデルのバリデーションに引っかかり、レンダリングされたが、表示されるはずのエラーメッセージが表示されないという事象が発生したので、その原因を紹介します。
誤っていたコード
.rb
class PostsController < ApplicationController
def new
@post = Post.new
end
def create
@post = Post.new(post_params)
if @post.save
redirect_to root_path
else
@post = Post.new #render前にnewを呼んでいた
render "new"
end
end
private
def post_params
params.require(:post).permit(:content)
end
end
原因
原因はsaveに失敗し、レンダリングする前に、@post = Post.newを記述してしまっていた事が原因でした。
@postに対してエラーメッセージがあれば表示するようにしているが、@postへPost.newを新たに入れてしまうと、エラーが発生する前と同じ状態に戻ってしまうため、エラーメッセージが表示されないという状態になっていました。
ということで一行削除したら解決しました。
今ならそんなミスしないだろと思うのですが、、、
勉強始めた頃にやってしまったミスです