Userモデルのemailに、存在チェックとフォーマットチェックを入れることを考えます。
必要なgemをインストールしておきます。
# Gemfile gem 'validates_email_format_of'
普通にやってみる
class User < ActiveRecord::Base validates :email, presence: true, email_format: {:with => /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i,:message => 'の形式が不適切です。'} end
この場合emailが空のときにはエラーが2つ入ってしまいました。
user = User.new user.valid? #=> false user.errors[:email] #=> ["を入力してください。", "の形式が不適切です。"]
ちょっと工夫してみる
上記だとなんだかいまいちなので、emailが空のときは存在エラー、フォーマットがおかしいときはフォーマットのエラーだけが入るようにします。
バリデーションを2つに分けて、フォーマットチェックにallow_blankを設定します。
class User < ActiveRecord::Base validates :email, presence: true validates :email, email_format: {:with => /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i,:message => 'の形式が不適切です。'}, allow_blank: true end
すると、いい感じのバリデーションになりました。
user = User.new user.valid? #=> false user.errors[:email] #=> ["を入力してください。"] user.email = "hoge" user.valid? #=> false user.errors[:email] #=> ["の形式が不適切です。"]
こっちのほうがユーザにとってわかりやすいエラーを表示できそう。
以上です。