こんにちは!kossyです!
さて、今回は、Railsのvalidationでのlambdaの使い方を
ブログに残してみたいと思います。
後置ifでlambdaを渡す
サンプルコードを晒してみます。
class User before_validation :name, presence: true if lambda { |obj| name.will_save_change_to_name? || name.present? } end
before_validationはレコードを保存する前に実行されるコールバックで、
サンプルコード内ではnameに対して実行されるように設定しています。
presence: trueはいわゆるnot_null制約で、レコード保存時にnameが存在していないと例外を発生させます。
今回のコードのキモは後置ifに続くlambda文で、
nameが変更されているかチェックする構文がwill_save_change_to_name?です。
nameが変更されているか、nameが存在すればpresence: trueのvalidationが実行されるようになります。
このようにlambdaを渡すと、validationの実行条件をカスタマイズできるようになります。
実際にバリデーションを設定すると、
「このシチュエーションの時はバリデーションして欲しくないなぁ」
といったケースが出てくるので、そんな時にlambdaを渡すやり方を検討して見るといいと思います。