LoginSignup
29
26

More than 3 years have passed since last update.

with_optionsを使って、同じバリデーションを一括りにしちゃえ!

Posted at

はじめに

 今のアプリケーション作成で使ったバリデーションについて、まとめておく。

共通のバリデーションをまとめる

with_options

よく使うバリデーションを例に

model
validates :user, presence: true
validates :item, presence: true
validates :price, presence: true
validates :email, presence: true

なんか同じことばかり繰り返していて、長くなり、可読性が…
そんなときは、with_optionsでまとめてバリデーションを設定できる。

model
with_options presence: true do
  validates :user
  validates :item
  validates :price
  validates :email
end

with_optionsをさらに発展的に使って

さらに個別にバリデーションを追加

model
with_options presence: true do
  validates :user, length: { minimum: 6 }
  validates :item
  validates :price, format: { with: /\A[0-9]+\z/ }
  validates :email
end

do~endの中に個別でバリデーションを付けられる。
ちなみに、lengthオプションは、文字数を限定できる。
formatオプションは正規表現についての指定。

さらにまとめる

model
with_options presence: true do
  validates :user
  validates :item
  with_options uniqueness: true do
    validates :price
    validates :email
  end
end

with_optionsの中にwith_optionsを入れ子にできる。
上の例だと、
presence: trueは:user, :item, :price, :emailに設定され、
さらに、uniqueness: trueは:price, :emailに設定されている。
ちなみに、uniquenessオプションは同じ値を保存できないようにする。(一意性)

最後に

 with_optionsでまとめて記述するのは、中学の数学で出てきた、因数分解の学習あたりの共通項で括る感覚に近い。

29
26
2

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
29
26