rails 4 验证同一参数的存在和长度
rails 4 validates presence and length on the same parameter
像这样进行验证是个好主意吗:
validates :serialnumber, presence: true, length: {7..20}, format: {with: /\d{7,20/}
如您所见,如果我不输入序列号,它会生成三个错误。
我只想看到一个错误。
如果我什么都不输入,我只想看到 'serial number is required'。
如果我输入 123ABC
我只想看到 'wrong length'
如果我输入 123-ABC-123
我只想看到 'wrong format'
怎么做?
此致
您可以将其拆分为 2 个验证器,检查这是否可行
validates :serialnumber, presence: true
validates :serialnumber, length: {7..20}, format: { with: /\d{7,20}/ }, allow_blank: true
据我了解,您希望一次只看到一条错误消息。如果是这种情况,那么 custom validation 方法可能会有所帮助。例如
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
而不是 validates
调用的。
像这样进行验证是个好主意吗:
validates :serialnumber, presence: true, length: {7..20}, format: {with: /\d{7,20/}
如您所见,如果我不输入序列号,它会生成三个错误。
我只想看到一个错误。
如果我什么都不输入,我只想看到 'serial number is required'。
如果我输入 123ABC
我只想看到 'wrong length'
如果我输入 123-ABC-123
我只想看到 'wrong format'
怎么做?
此致
您可以将其拆分为 2 个验证器,检查这是否可行
validates :serialnumber, presence: true
validates :serialnumber, length: {7..20}, format: { with: /\d{7,20}/ }, allow_blank: true
据我了解,您希望一次只看到一条错误消息。如果是这种情况,那么 custom validation 方法可能会有所帮助。例如
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
而不是 validates
调用的。