Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】バリデーション

f:id:kina_kq:20210510081539j:plain

バリデーションとは、

データベースに保存する前に保存する内容を検証する機能です。

 

バリデーションを定義することによって、フォームの入力必須の欄が入力されていなかったときに、フォームの送信を出来ないようにすることが出来ます。

 

バリデーションのトリガ

 

  • 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_integertrueにします。

 

❏ presence

 

このヘルパーは指定された属性が空でないかを検証します。

内部ではblank?メソッドを使っています。

 

class Person < ApplicationRecord
  validates :name, :login, :email, presence: true
end

 

参考

Active Record バリデーション - Railsガイド

【Rails】Railsのバリデーションの使い方をマスターしよう! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト