私は素晴らしいclient_side_validations gem を使用しており、次のようなカスタム バリデータを作成しました。
class PersonNameValidator < ActiveModel::EachValidator
def validate_each(record, attr_name, value)
record.errors.add(attr_name) if record.errors.has_key?(:person_id)
end
end
私の目標は、:person_name
無効な場合に仮想属性を無効にすること:person_id
です。私の質問は、別の属性が有効かどうかを判断する方法として、if record.errors.has_key?
別のバリデータ内で使用することが合理的かどうかです。
バリデーターは宣言された順序で起動することを読んだので、これは私のモデルにあります:
validates :person_id, numericality: { greater_than: 0 }
validates :person_name, presence: true
検証を DRY に保つ方法として、この手法に頼るのは賢明ですか?