ActiveRecord validations 是Rails很方便的一项特性,由于它如此好用,我们经常使用它,让用户看着了不舒服的信息,比如下面所说的例子:
举个例子,比如现在我要在用户注册的时候验证 Social Security Number (SSN) ,一般代码会是这个样子的:
class User < ActiveRecord::Base
validates_presence_of :ssn
validates_length_of :ssn, :is => 9
validates_numericality_of :ssn
validates_uniqueness_of :ssn
validates_as_ssn :ssn # Checks if a reserved or special SSN was sent
end
根据以上的配置,如果用户忘记填入SSN,那个页面上会显示4个错误提示信息:
- SSN can’t be blank
- SSN is the wrong length (should be 9 characters)
- SSN is not a number
- SSN is invalid
问题是,用户只是没有填入SSN,我们应该只显示一条不为空的信息啊,为什么要将其它的不相关的信息也显示出来吓着了用户呢?
解决这个问题的方法很简单,我们可以使用 :allow_blank 选项,因此那其它的验证在SSN号为空的时候是不空触发的:
class User < ActiveRecord::Base
validates_presence_of :ssn
validates_length_of :ssn, :is => 11, :allow_blank => true
validates_numericality_of :ssn, :allow_blank => true
validates_uniqueness_of :ssn, :allow_blank => true
validates_as_cpf :ssn, :allow_blank => true
end
还可以使用Rails框架给Object添加的Object#with_options 这个方法:
class User < ActiveRecord::Base
validates_presence_of :ssn
with_options :allow_blank => true do |v|
v.validates_length_of :ssn, :is => 11
v.validates_numericality_of :ssn
v.validates_uniqueness_of :ssn
v.validates_as_cpf :ssn
end
end
这以上举的只是一个例子,还有如 validates_confirmation_of :password ,只有在确认密码不为空的时候才验证confirmation
分享到:
相关推荐
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...
《Rails101_by_rails4.0》通过 Lean Publishing 的出版流程,让书籍在发布过程中能够不断吸纳读者的反馈,通过多次迭代优化内容,直至形成一本高质量的自学教程。Lean Publishing是指利用轻量级的工具,快速出版一...
在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...
此外,Rails还内置了许多实用功能,如ActiveRecord(用于数据库交互)、Action View(用于页面渲染)和Action Controller(用于处理用户请求),这些都使得开发者能够快速构建出功能丰富的Web应用程序。 #### 2. ...
Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...
- **作者机制实现**:让文章与用户建立关联,实现“作者”概念。 - **组群功能**:允许用户加入或退出特定组群,增强社区互动性。 - **后台管理系统**:构建一个简单的后台管理系统,方便管理员进行内容管理和用户...
Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...
首先,让我们了解Rails的MVC架构。模型(Model)负责处理业务逻辑和数据存储,视图(View)用于展示用户界面,而控制器(Controller)作为模型和视图之间的桥梁,处理用户输入并协调二者之间的交互。在购物车系统中...
Rails以其“约定优于配置”(Convention over Configuration)和“Don't Repeat Yourself”(DRY,不要重复自己)的原则,极大地提高了开发效率和代码可读性,成为了Web2.0时代敏捷开发的首选工具。 在Ruby on ...
第十一章“Searching and browsing”讲述了如何为用户提供搜索和浏览的功能,让他们能够轻松找到感兴趣的内容或用户。这部分内容涉及全文搜索的技术实现以及高效的查询优化策略。 ##### 5.4 头像上传功能 第十二章...
标签 "工具" 可能意味着讨论到了与Rails开发相关的工具,如集成开发环境(IDEs)、包管理器(如Bundler)、测试框架(如RSpec和Capybara)、调试工具等,这些工具能提升开发效率和代码质量。 压缩包子文件的文件...
学习Rails项目起步,你需要熟悉这些核心概念,并掌握如何创建和运行Rails应用,以及如何使用Rails的命令行工具。同时,理解MVC模式和Rails的约定优于配置(Convention Over Configuration, CoC)原则是至关重要的。...
这里的`***`代表你想让服务器监听的端口号。默认情况下,Rails应用会在3000端口启动。 Rails3还提供了生成API文档的功能,通过运行: ```bash rake doc:rails ``` 这将在`doc/api`目录下生成一份完整的Rails API...
在压缩包的文件名称列表中,只有一个条目 "rails",这可能意味着压缩包内包含了 Rails 框架的核心文件,如 gemspec 文件、库文件、初始化脚本等。开发者可以通过解压这个文件,进一步了解 Rails 框架的结构和工作...
使用gem命令,用户可以直接安装这些本地的gem文件,快速搭建Rails 2.1.0的开发环境。在安装时,需要确保Ruby环境已就绪,并且具备相应的权限。通过这种方式,开发者可以立即开始使用Rails进行Web应用的开发工作。
最后,Rails API的应用往往需要与前端框架如React、Vue.js或Angular配合,通过前端路由和状态管理工具构建单页应用(SPA),以提供更好的用户体验。 总的来说,Rails API 提供了一套完整的框架,用于构建高效、易于...
### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...
9. **Rate Limiting**:防止恶意用户或脚本滥用API,Rails API可以通过中间件(如Rack::Attack)实现请求速率限制。 10. **测试**:测试是API开发的关键部分,Rails API支持RSpec、Minitest等多种测试框架,方便...