在我的用户模型中,我有字段email
,不是必需的。
我想验证该字段,当且仅当它出现时。 它可以是空白的,但如果它的存在应该被验证。 嗯,现在怎么样,它从未经过验证。
如果删除unless
条件,则始终验证(通常)
class User < ActiveRecord::
validates :email,
format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i },
uniqueness: true,
unless: lambda { email.nil? }
有什么建议吗?
答案 0 :(得分:2)
如果您使用的是devise,那么您无需担心它......如果没有,那么您可以在模型中使用以下代码: -
EMAIL_REGEX = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX,unless: lambda { self.email.blank? }
答案 1 :(得分:1)
可能是因为它不是nil
,而是一个空字符串。请改用allow_blank
:
validates :email,
format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i },
uniqueness: true,
allow_blank: true