【Rails】バリデーション
バリデーションとは、
データベースに保存する前に保存する内容を検証する機能です。
バリデーションを定義することによって、フォームの入力必須の欄が入力されていなかったときに、フォームの送信を出来ないようにすることが出来ます。
バリデーションのトリガ
create
create!
save
save!
update
update!
検証データが保存されない場合
saveとupdateは、falseが、
createは、オブジェクト自身を返します。
メソッド名の最後に!をつけると、
保存されなかった場合には例外処理を返します。
バリデーションのスキップ
バリデーションのスキップは、バリデーションを行わずスキップします。
-
-
decrement!
-
decrement_counter
-
increment!
-
increment_counter
-
toggle!
-
touch
-
update_all
-
update_attribute
-
update_column
-
update_columns
update_counters
-
しかし、saveにvalidate: false
を引数として与えると、save
のバリデーションをスキップできてしまうようなので注意が必要です。
valid? とinvalid?
valid?
メソッドを使って、バリデーションを手動でトリガすることもできます。
オブジェクトにエラーが無いときにはtrue
が返され、そうでなければfalse
が返されます。
バリデーションヘルパー
バリデーションヘルパーは共通のバリデーションルールを提供します。
バリデーションが失敗すると、オブジェクトのerrorsコレクションにエラーメッセージが追加され、そのメッセージは、バリデーションが行われる属性に関連付けられます。
❏ :onオプション
どのヘルパーでも使用できます。
バリデーション実行のタイミングを設定することができます。
:on
オプションは:create
または:update
のいずれかの値を取ります。
❏ :messageオプション
どのヘルパーでも使用できます。
バリデーション失敗時にerrorsコレクションに追加するメッセージを指定することができます。このオプションが無いときは、デフォルトのメッセージが表示されます。
❏ acceptance
フォームが送信されたときに、ユーザーインターフェイス上のチェックボックスがオンになっているかどうかを検証するメソッドです。
サービス利用条項への同意が必要は場合によく使われます。
❏ confirmation
このヘルパーは、2つのテキストフィールドで受け取る内容が完全に一致する場合に使われます。
メールアドレスやパスワードが完全に一致するかの確認フィールドで使われます。
属性の名前は、確認したい属性名に「_confirmation」を追加します。
❏ length
このヘルパーは、属性の値の長さを検証します。
class Person < ApplicationRecord validates :name, length: { minimum: 2 } validates :bio, length: { maximum: 500 } validates :password, length: { in: 6..20 } validates :registration_number, length: { is: 6 } end
値の大小から文字数の制限まで指定することができます。
❏ numericality
このヘルパーは、属性に数字のみが使われているかを検証します。
デフォルトでは整数または浮動小数点にマッチします。
整数のみにマッチさせたい場合、:only_integer
をtrue
にします。
❏ presence
このヘルパーは指定された属性が空でないかを検証します。
内部ではblank?
メソッドを使っています。
class Person < ApplicationRecord validates :name, :login, :email, presence: true end
参考
Active Record バリデーション - Railsガイド
【Rails】Railsのバリデーションの使い方をマスターしよう! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト