我基本上要做的是创建一个自定义验证,它调用具有特定选项的 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'}