複数のカラムの値が連携する場合のバリデーションはカスタムメソッドで実現できました。
たとえば、Personモデルに真偽値のカラムflg_a
とflg_b
があり、それらが同時にfalseになってはいけない場合には以下のように記述します。
persons.rb
class Person < ActiveRecord::Base
validate :flgs_cannot_be_false_at_once
def flgs_cannot_be_false_at_once
error_msg = "flg_aとflg_bが同時にfalseになることはできません。"
errors.add(:flg_a, error_msg) unless flg_a || flg_b
end
end
モデルにカスタムメソッドflgs_cannot_be_false_at_once
を定義して、メソッド名をシンボルの形でvalidate
に渡します。(validates
ではなく validate
(sがない))
参考:Ruby on Rails Guides: Active Record Validations and Callback 6.2 Custom Methods