railsで空白をpostした時に全てのバリデーション結果が出力された時の解決法

Share this post

railsApiが大量のバリデーションエラー文を吐いた..

railsを使ったバリデーション結果をreact(フロント側で)表示した時に起こったトラブルです。

  validates :email, presence: true
  validates :email, format: { with: /\A[a-zA-Z]+\z/}

例えばこんなバリデーションをmodleに書いてるとして、フロント側(今回はReact)で空白の文字を入れると
"〇〇を入力してください","〇〇は不正な値です"と2つのバリデーションエラー文が返ってきます。

基本的に空白の文字の際に出力したいエラー文は"〇〇を入力してください"くらいなので
これは少し過剰なわけです。

before

  validates :email, presence: true
  validates :email, format: { with: /\A[a-zA-Z]+\z/}

after

  validates :email, presence: true
  validates :email, format: { with: /\A[a-zA-Z]+\z/}, allow_blank: true

こんな風に allow_blank: trueを追加してあげるだけで空白時はバリデーションが実行されなくなります。
補足としては、空でないことを判定するpresence: trueは空白時にも実行してあげたほうがいいので、
presence: trueにはallow_blank: trueを追加しないほうがいいですね。

終わりに

Railsのバリデーション結果を表示したい時は必須の設定なので、ぜひ覚えてみましょう!

Share this post