Ruby on rails rails 4验证同一参数的存在性和长度
这样进行验证是否是一个好主意:Ruby on rails rails 4验证同一参数的存在性和长度,ruby-on-rails,validation,Ruby On Rails,Validation,这样进行验证是否是一个好主意: validates :serialnumber, presence: true, length: {7..20}, format: {with: /\d{7,20/} 如您所见,如果我不键入serialnumber,它会生成三个错误。 我只想看到一个错误。 如果我没有键入任何内容,我只希望看到“需要序列号”。 如果我键入123ABC我只希望看到“错误长度” 如果我输入123-ABC-123我只想看到“格式错误” 怎么做 关于您可以将其拆分为2个验证器,检查这是否
validates :serialnumber, presence: true, length: {7..20}, format: {with: /\d{7,20/}
如您所见,如果我不键入serialnumber,它会生成三个错误。
我只想看到一个错误。
如果我没有键入任何内容,我只希望看到“需要序列号”。
如果我键入123ABC
我只希望看到“错误长度”
如果我输入123-ABC-123
我只想看到“格式错误”
怎么做
关于您可以将其拆分为2个验证器,检查这是否可行
validates :serialnumber, presence: true
validates :serialnumber, length: {7..20}, format: { with: /\d{7,20}/ }, allow_blank: true
您可以将其拆分为2个验证器,检查这是否有效
validates :serialnumber, presence: true
validates :serialnumber, length: {7..20}, format: { with: /\d{7,20}/ }, allow_blank: true
据我所知,您一次只希望看到一条错误消息。如果是这样的话,这个方法可能会有所帮助。例如
validate :serial_number_validation_one_by_one
private
def serial_number_validation_one_by_one
if !self.serial_number.present?
errors.add(:serial_number, "must be present!")
elsif self.serial_number.length < 7 || self.serial_number.length > 20
errors.add(:serial_number, "must have length between 7 and 20!")
elsif self.serial_number.match(<your regex pattern here>)
errors.add(:serial_number, "must be properly formatted!")
end
end
validate:serial\u number\u validation\u one\u
私有的
def序列号\u验证\u逐个\u
如果!self.serial\u number.present?
错误。添加(:序列号,“必须存在!”)
elsif self.serial_number.length<7 | self.serial_number.length>20
错误。添加(:序列号,“长度必须介于7和20之间!”)
elsif self.serial_number.match()
错误。添加(:序列号,“必须正确格式化!”)
结束
结束
请记住,自定义验证方法由
validate
调用,而不是由validates
调用。据我所知,您一次只希望看到一条错误消息。如果是这样的话,这个方法可能会有所帮助。例如
validate :serial_number_validation_one_by_one
private
def serial_number_validation_one_by_one
if !self.serial_number.present?
errors.add(:serial_number, "must be present!")
elsif self.serial_number.length < 7 || self.serial_number.length > 20
errors.add(:serial_number, "must have length between 7 and 20!")
elsif self.serial_number.match(<your regex pattern here>)
errors.add(:serial_number, "must be properly formatted!")
end
end
validate:serial\u number\u validation\u one\u
私有的
def序列号\u验证\u逐个\u
如果!self.serial\u number.present?
错误。添加(:序列号,“必须存在!”)
elsif self.serial_number.length<7 | self.serial_number.length>20
错误。添加(:序列号,“长度必须介于7和20之间!”)
elsif self.serial_number.match()
错误。添加(:序列号,“必须正确格式化!”)
结束
结束
请记住,自定义验证方法由validate
调用,而不是由validates
调用