仅在存在时阻止电子邮件验证

时间:2015-02-19 12:40:45

标签: ruby-on-rails ruby-on-rails-4

在我的用户模型中,我有字段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? }

有什么建议吗?

2 个答案:

答案 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