rails 4验证同一参数的存在和长度

时间:2015-03-09 11:08:23

标签: ruby-on-rails validation

拥有这样的验证是否是个好主意:

validates :serialnumber, presence: true, length: {7..20}, format: {with: /\d{7,20/}

如果我没有输入serialnumber,你会发现它会产生三个错误。 我只想看到一个错误。 如果我没有输入任何内容,我希望只看到“序列号是必需的”。 如果我输入123ABC,我只希望看到'错误的长度' 如果我输入123-ABC-123,我希望只看到'格式错误'

怎么做?

此致

2 个答案:

答案 0 :(得分:4)

您可以将其拆分为2个验证器,检查这是否有效

validates :serialnumber, presence: true
validates :serialnumber, length: {7..20}, format: { with: /\d{7,20}/ }, allow_blank: true

答案 1 :(得分:0)

据我所知,您希望一次只能看到一条错误消息 。如果是这种情况,那么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会调用自定义验证方法。