with_options
with_options 〇〇
と書くことで、
複数の情報に対して共通したオプションを付けることが可能。
具体例を用いて比較
「a、b、cそれぞれのカラムが空では保存できない」というバリデーションを設定する場合
class Sample < ApplicationRecord
validates :a, presence: true
validates :b, presence: true
validates :c, presence: true
end
この様に共通の
presence: true
(カラムが空では保存できない)といった
validationをひとつひとつに設定していく
class Sample < ApplicationRecord
with_options presence: true do
validates :a
validates :b
validates :c
end
end
上記の様にdo〜end内でバリデーションを指定した属性に対して、
値が存在 (presence) しなければならないという制限を一括で設ける
ことができる
一括で設けた上で更に細かなvalidationを設定する
validatesメソッドのオプション
今回はformatオプション
に関して
numericality
オプションもあります
- モデルクラスの中で
validatesメソッド
を使用する際に利用できるオプション -
文字列
で保存される情報に正規表現によって入力制限をすることが可能
記述方法
format: {with: 正規表現, message: 正規表現にマッチしなかった場合のエラーメッセージ}
今回ここで紹介する正規表現は以下の6種類
正規表現 | 意味 |
---|---|
/\A[ぁ-んァ-ン一-龥々]/ | 全角ひらがな、全角カタカナ、漢字 |
/\A[ァ-ヶー-]+\z/ | 全角カタカナ |
/\A[a-zA-Z0-9]+\z/ | 半角英数 |
/\A\d{3}[-]\d{4}\z/ | 郵便番号(「-」を含む且つ7桁) |
greater_than_or_equal_to: 〇〇 | 〇〇と同じか、それ以上の数値 |
less_than_or_equal_to: △△ | △△と同じか、それ以下の数値 |
実際に使用する正規表現
- 全角ひらがな、全角カタカナ、漢字
- 全角カタカナ
- 半角英数
実際の記述
class User < ApplicationRecord
with_options presence: true do
validates :name, format: { with: /\A[ぁ-んァ-ン一-龥々]/, message: "全角ひらがな、全角カタカナ、漢字で入力して下さい" }
validates :name_reading, format: { with: /\A[ァ-ヶー-]+\z/, message: "全角カタカナで入力して下さい" }
validates :nickname, format: { with: /\A[a-z0-9]+\z/i, message: "半角英数字で入力して下さい" }
end
end
-
with_options presence: true do
- 値が存在 (presence) しなければならないという制限を一括で設ける
-
validates :name
- カラム名を指定
-
format: { with: ~~
- withオプションで与えられた正規表現と属性の値がマッチするかどうか
この様な形で共通のvalidationを設定した上で、
更に細かなvalidationを設定する
ことが可能
更にまとめる
with_optionsにwith_options
with_options presence: true do
validates :user
validates :item
with_options uniqueness: true do
validates :price
validates :email
end
end
ネストして組み合わせると
上記の様によりコンパクトにまとめる
事も可能