解決したいこと
- メールアドレスが空欄の時、エラーメッセージが複数表示されてしまう
- 「空欄」と「型に一致しない」の両方に当てはまってしまうから
- 片方のエラーメッセージだけ表示するようにしたい
- 以下の場合は「メールアドレスを入力してください」を優先したい
- この時のメールアドレスのバリデーション(app/models/user.rb)
class User < ApplicationRecord
# 中略
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, length:{maximum: 255},
format: { with: VALID_EMAIL_REGEX }
# 以下省略
end
解決方法
- 条件分岐でエラーメッセージの表示に優先順位をつける
- 空欄>文字数>メールアドレスの型の順
class User < ApplicationRecord
# 中略
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validate :email_custom_error
def email_custom_error
if email.blank?
errors[:base] = "メールアドレスを入力してください"
elsif email.length > 255
errors[:base] = "メールアドレスは255文字以内で入力してください"
elsif email.match(VALID_EMAIL_REGEX) == nil
errors[:base] = "メールアドレスが不正です"
end
end
# 以下省略
end
他により良い書き方があればぜひ教えてください...!