0

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

1 回答 1

1
class SelectBooleanValidator < ActiveModel::Validations::InclusionValidator
  def options
    super.merge(:in => [true, false], message: 'can\'t be blank')
  end
end
于 2013-04-29T06:26:07.170 回答