概要
simple_form
のBootstrap
版を使用している際、
エラーメッセージが該当入力欄のすぐ下に出てくるのは非常にユーザーがわかりやすくてい良い。
presence
と format
の両方を指定すると、
空欄の時に両方のエラーメッセージが表示され非常に見栄えが良くない。
format
だけ指定すれば、未入力の場合もエラーが出るが、
適切なエラーメッセージにはならない。
そもそもそんな細かいところ気にしなくても良いかもしれないですが、
私と同じ神経質なあなた!
にはこの記事がお役に立てるかと思います。
方法
この方法は、devise
のソースコードを参考にやってみたらうまく行ったというものですので、
方法としては問題ないかと思います。
仮に未入力禁止で全角文字しか入力をさせたくないfirst_name
という入力欄をつくるとします。
その場合、一行で書いてしまうなら以下のようになるかと思います。
validates :first_name, presence: true, format: { with: /\A[ぁ-んァ-ン一-龥]+\z/i }
しかしこれだと未入力の時に、エラーメッセージが2つ表示されて非常に美しくない。
しかし、devise
デフォルトのemail入力欄は、未入力の場合は入力されていないと表示され、
入力されて形式が間違っている場合は、形式が違うとエラーメッセージがきちんと出し分けられています。
そこで、devise/validatable.rb
に記述されているemail
へのバリデーションを参考に調整してみた結果が以下です。
validates_presence_of :first_name
validates_format_of :first_name, with: /\A[ぁ-んァ-ン一-龥]+\z/i, allow_blank: true
これならエラーメッセージの出し分けが望み通りに行われています。
さいごに
もっと良い方法がございましたらぜひご教授お願いいたします。