我对Rails很陌生,找到了一个小片段来逐步验证存在性和唯一性:首先判断存在性,然后判断唯一性.

validates :email, :presence => true, :allow_blank => true, :uniqueness => { :case_sensitive => false }

我对同时使用presence => trueallow_blank => true有点困惑.

如果不使用allow_blank => true,两个规则将同时判断,而不是逐步判断.

为什么allow_blank => true会有这种魔力?

推荐答案

您得到的与此等效(为了清晰起见,请包装):

validates :email, :presence => true, 
            :uniqueness => { :allow_blank => true, :case_sensitive => false }

这有点傻,因为如果你要求在场,那么这将使:allow_blank条款"无效"到:uniqueness.

当您切换到使用其他验证器时,它更有意义..说formatuniqueness,但如果是空的,你不需要任何判断.在这种情况下,添加一个"全局应用的":allow_blank更有意义,代码也会干涸一点.

validates :email, :format => {:allow_blank => true, ...}, 
                  :uniqueness => {:allow_blank => true, ...}

可以这样写:

validates :email, :allow_blank => true, :format => {...}, :uniqueness => {...}

Ruby-on-rails相关问答推荐

rails中Net::STP的多文件模式

Rails turbo流只更新页面上的一个元素

Gemfile需要较新版本的依赖项

Rails HMAC - 使用应用程序机密作为加密密钥

计算总价(商品数量*商品价格)

Rails 自动加载完全大写的名称,如 API

Rails - 如何从 http://example.com 重定向到 https://www.example.com

Rails 发现获取 ActiveRecord::RecordNotFound

Rails 将 form_for 对象传递给部分

运行多个 Rails Server 实例

RSpec 设置会话对象

我如何存根 find_each 以在 rails 3 中进行 rspec 测试

Rails Mailer Net::OpenTimeout: execution expired 仅在生产服务器上出现异常

如何在 Rails 迁移中添加判断约束?

使用 SQLite 3 将 RoR 应用程序部署到 Heroku 失败

设计和强大的参数

如果缺少翻译,则回退到默认语言

Rails 控制台中手动更新属性值的验证问题

设计:在注册期间禁用密码确认

警告:运行 ruby​​ 或 gem 命令时不安全的世界可写目录