RailsのValidationで必要なエラーがだけを出すチョイワザ
こんなバリデーションを入れているとする。
validates :login_id, presence: true, uniqueness: { case_sensitive: false }, length: { in: MIN_LENGTH_LOGIN_ID..MAX_LENGTH_LOGIN_ID }, format: { with: /\A\w+\z/i }
これだと、未入力でバリデーションにかかると、
- ログインIDを入力してください!
- ログインIDは4文字以上です!
- ログインIDは不正な値です!
とか畳み込まれる。
せめて、入力してから出そうと思ったものは2行に分けて、入力があったときだけバリデーションするとよい。
validates :login_id, presence: true, uniqueness: { case_sensitive: false }, length: { in: MIN_LENGTH_LOGIN_ID..MAX_LENGTH_LOGIN_ID } validates :login_id, format: { with: /\A\w+\z/i }, if: ->(u) { u.login_id.present? }
が、あまりこの書き方は好きではない。
どうしたらいいのや。