我基本上要做的是创建一个自定义验证,该验证使用特定选项调用RoR默认验证,以尝试减少样板(并使所有模型全局使用此验证)
在RoR中对某个字段进行自定义验证的方法是使用validates_each方法,如下所示
class SelectBooleanValidator < ActiveModel::EachValidator
def validate_each(record,attr,value)
#do validation here
end
end
我要做的是在validator_each中调用包含验证器方法,以便select_boolean验证(我正在实现)只使用:包含验证器和某些选项,即我想做这样的事情(请注意,此代码实际上不起作用,但以下是我基本上尝试做的事情)
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'}
答案 0 :(得分:1)
class SelectBooleanValidator < ActiveModel::Validations::InclusionValidator
def options
super.merge(:in => [true, false], message: 'can\'t be blank')
end
end