拥有这样的验证是否是个好主意:
validates :serialnumber, presence: true, length: {7..20}, format: {with: /\d{7,20/}
如果我没有输入serialnumber,你会发现它会产生三个错误。
我只想看到一个错误。
如果我没有输入任何内容,我希望只看到“序列号是必需的”。
如果我输入123ABC
,我只希望看到'错误的长度'
如果我输入123-ABC-123
,我希望只看到'格式错误'
怎么做?
此致
答案 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
会调用自定义验证方法。