我基本上要做的是创建一个自定义验证,它调用一个带有特定选项的RoR默认验证,以尝试和减少样板(并使此验证可供所有模型全局使用)
在RoR中对某个字段进行自定义验证的方法是使用validates_each方法,如下所示
class SelectBooleanValidator < ActiveModel::EachValidator
  def validate_each(record,attr,value)
    #do validation here
  end
end我要做的是在validator_each中调用inclusion验证器方法,以便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'}发布于 2013-04-29 14:26:07
class SelectBooleanValidator < ActiveModel::Validations::InclusionValidator
  def options
    super.merge(:in => [true, false], message: 'can\'t be blank')
  end
endhttps://stackoverflow.com/questions/16271576
复制相似问题