Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@iamu_TECH_CAMP

with_optionsで複数のバリデーションをまとめる

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: △△ △△と同じか、それ以下の数値

実際に使用する正規表現

  1. 全角ひらがな、全角カタカナ、漢字
  2. 全角カタカナ
  3. 半角英数


実際の記述
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

ネストして組み合わせると
上記の様によりコンパクトにまとめる事も可能

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
iamu_TECH_CAMP
学習したことや気づきを記録していきます。お気づきの点がありましたら、ご教授ください。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?