リア充爆発日記

You don't even know what ria-ju really is.

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? }

が、あまりこの書き方は好きではない。

どうしたらいいのや。