LoginSignup
1
0

More than 5 years have passed since last update.

Rails バリデーションで presence と format の両方を指定時にsimple_formでエラーメッセージを適切に表示する

Posted at

概要

simple_formBootstrap版を使用している際、
エラーメッセージが該当入力欄のすぐ下に出てくるのは非常にユーザーがわかりやすくてい良い。

presenceformat の両方を指定すると、
空欄の時に両方のエラーメッセージが表示され非常に見栄えが良くない。

format だけ指定すれば、未入力の場合もエラーが出るが、
適切なエラーメッセージにはならない。

そもそもそんな細かいところ気にしなくても良いかもしれないですが、
私と同じ神経質なあなた!

にはこの記事がお役に立てるかと思います。

方法

この方法は、deviseのソースコードを参考にやってみたらうまく行ったというものですので、
方法としては問題ないかと思います。

仮に未入力禁止で全角文字しか入力をさせたくないfirst_nameという入力欄をつくるとします。
その場合、一行で書いてしまうなら以下のようになるかと思います。

validates :first_name, presence: true, format: { with: /\A[ぁ-んァ-ン一-龥]+\z/i }

しかしこれだと未入力の時に、エラーメッセージが2つ表示されて非常に美しくない。

Screen Shot 2018-09-06 at 17.57.14.png

しかし、deviseデフォルトのemail入力欄は、未入力の場合は入力されていないと表示され、
入力されて形式が間違っている場合は、形式が違うとエラーメッセージがきちんと出し分けられています。

そこで、devise/validatable.rbに記述されているemailへのバリデーションを参考に調整してみた結果が以下です。

validates_presence_of :first_name
validates_format_of :first_name, with: /\A[ぁ-んァ-ン一-龥]+\z/i, allow_blank: true

これならエラーメッセージの出し分けが望み通りに行われています。

Screen Shot 2018-09-06 at 17.59.43.png
Screen Shot 2018-09-06 at 17.59.23.png

さいごに

もっと良い方法がございましたらぜひご教授お願いいたします。

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