Active Record まわり
2.1 acceptance
チェックボックス専用のバリデーション 複数個だとどうなるだろ?
2.2 validates_associated
アソシエーションを張っているものを一緒にバリデーションしてくれる便利くん
validates_associatedは関連付けの両側のオブジェクトでは実行しないでください。 関連付けの両側でこのヘルパーを使用すると無限ループになります。
なんだか物騒なことが書いていた。一方通行で。
2.5 format
マッチするかどうか
2.7 length
length { in: 6..10 }
のような範囲指定
is: は一致のバリデーション
2.11 uniqueness
scope:
2つの属性に対して行われる
uniqueness: { case_sensitive: false }
大文字小文字の区別をなくす
validates_withとvalidates_each
withだと一つのフィールドにおけるチェックするバリデーションクラスを作成。 validation専用のクラスにレコードを渡す eachではインスタンスに対するレコード、属性、値を渡して個々にチェックすることができます。
と書いてからいろいろ調べてみると validatorの方は複雑なvalidationのとき、 1つのフィールドに対するvalidationをさせたいときはEachvalidatorなんだとか。
まるまる各属性もっていきたい場合はvalidates_with
1つの属性で行う場合は
呼び出し方
class Person include ActiveModel::Validations validates_with MyValidator end
class Person < ActiveRecord::Base validates :email, presence: true, email: true end
の違い
3.4 :on
validationを行うタイミングを指定できる
5.2 :ifや:unlessでProcを使用する
Procを使用すると新しいメソッドを定義することなく条件を記述することが可能
if:
validates :phone, presence: true, if: :aaa def aaa x == "aaa" end
errorsの追加
errors[:base] << "この人物は以下の理由で無効です..."
[:base]は配列でメッセージを保存する