私が基本的にやろうとしているのは、ボイラープレートを試して減らすための特定のオプションを使用して RoR のデフォルトの検証を呼び出すカスタム検証を作成することです (この検証をすべてのモデルでグローバルに使用するようにします)。
RoR の特定のフィールドでカスタム検証を行う方法は、次のように validates_each メソッドを使用することです。
class SelectBooleanValidator < ActiveModel::EachValidator
def validate_each(record,attr,value)
#do validation here
end
end
私がやろうとしているのは、validator_each 内で包含バリデーター メソッドを呼び出して、select_boolean 検証 (私が実装している) が特定のオプションで :inclusion バリデーターを使用するようにすることです。コードは実際には機能しませんが、以下は私が基本的にやろうとしていることです)
class SelectBooleanValidator < ActiveModel::EachValidator
include ActiveModel::Validations
def validate_each(record,attr,value)
validates_with InclusionValidator, record,attr,value, {:in => [true, false],:message=>'can\'t be blank'}
end
end
そして、私は(モデル内で)これを行うだけです
validates :awesome_field, select_boolean:true
これを常に行う代わりに
validates :awesome_field, :inclusion => {:in => [true, false], message: 'can\'t be blank'}