LoginSignup
47
43

More than 3 years have passed since last update.

【初心者】Railsのvalidatesのpresenceでエラーメッセージが重複するのを防ぐ方法

Last updated at Posted at 2016-02-16

validatesについて、presenceと他の制約が一緒に表示されてしまうのをなんとかしたい。という質問をよく受けます。そこで、解決策をまとめておくことにしました。

エラーメッセージが重複で表示される

contact.rb

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: {with: VALID_EMAIL_REGEX}

この場合、何も入力しないと

・メールアドレスが入力されていません。
・メールアドレスが不正な値です。

※あらかじめエラーメッセージは、日本語化しています。

と表示されてしまいます。

エラーメッセージが重複するのを防ぐ方法

contact.rb

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, format: {with: VALID_EMAIL_REGEX}, allow_blank: true
  validates :email, presence: true

このように書くことで、何も入力しない場合でも

・メールアドレスが入力されていません。

とエラーメッセージが重複するのを防ぐことができます。

ポイント1

allow_blank: true とすることで、validates :email, format: {with: VALID_EMAIL_REGEX} が、メールアドレス(email)の入力が空の時に実行されないようにします。

ポイント2

validatesを2つに分けることで、 allow_blank: truevalidates :email, format: {with: VALID_EMAIL_REGEX} にかからないようにします。

補足

validates :email,
  presence: true,
  format: {with: VALID_EMAIL_REGEX, allow_blank: true}

このように一行で記述することもできます! :smile:

47
43
3

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
47
43