如何将无效电子邮件或电子邮件字段的验证错误留空?

时间:2014-08-03 10:56:44

标签: ruby-on-rails ruby

我正在尝试在一个表单中验证字段,我希望输入两个不同的消息两个不同的消息。

我有以下代码:

validates_format_of :email, 
                    :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
                    :allow_blank => false

如果电子邮件字段留空,则会在网站上显示错误消息“电子邮件无效”。

我如何获得验证以返回一条消息,如果该字段被用户遗漏,该字段不能为空,而不是仅仅说它太短?

3 个答案:

答案 0 :(得分:1)

您为空白案例创建单独的验证:

validates_presence_of :email    
validates_format_of :email, 
                    :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
                    :allow_blank => true

答案 1 :(得分:1)

我喜欢用2种不同的验证来处理这个问题(并确保它们不会同时发射)。所以像这样:

validates_format_of :email,
                    :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
                    :allow_blank => true
validates_presence_of :email

validates_presence_of处理确保电子邮件不为空。将validates_format_of更改为使用:allow_blank => true可确保在电子邮件空白时格式化验证无法运行。

在Rails 3.0+中,您还可以使用validates将两个验证合并为一个验证:

validates :email,
          presence: true,
          format: { with: /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
                    allow_blank: true }

答案 2 :(得分:1)

您需要单独添加另一个在线验证检查,例如:

validates :email, presence: true, format: { with: YOUR_REGEX }