LoginSignup
1
6

More than 5 years have passed since last update.

Railsで必要なエラーメッセージのみ表示するようにバリデーションを修正

Posted at

解決したいこと

  • メールアドレスが空欄の時、エラーメッセージが複数表示されてしまう
    • 「空欄」と「型に一致しない」の両方に当てはまってしまうから
  • 片方のエラーメッセージだけ表示するようにしたい
    • 以下の場合は「メールアドレスを入力してください」を優先したい

スクリーンショット 2018-06-22 6.47.49.png

  • この時のメールアドレスのバリデーション(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

他により良い書き方があればぜひ教えてください...!

参考資料

1
6
1

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
6