1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

form送信時、バリデーションが失敗したのにエラーメッセージが表示されない

Last updated at Posted at 2020-12-17

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を新たに入れてしまうと、エラーが発生する前と同じ状態に戻ってしまうため、エラーメッセージが表示されないという状態になっていました。

ということで一行削除したら解決しました。
今ならそんなミスしないだろと思うのですが、、、
勉強始めた頃にやってしまったミスです

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?