`
机器人
  • 浏览: 85085 次
  • 性别: Icon_minigender_2
  • 来自: Google
社区版块
存档分类
最新评论

不要让你的Rails Validate吓着了用户

阅读更多

 

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,我们应该只显示一条不为空的信息啊,为什么要将其它的不相关的信息也显示出来吓着了用户呢?

 

OMG! What have I done wrong to appear so many errors?

 

解决这个问题的方法很简单,我们可以使用 :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

3
1
分享到:
评论
9 楼 fireflyman 2009-09-16  
地址!@#¥%……&×()
8 楼 Hooopo 2009-09-16  
求你了。。。给我吧,,机器人
7 楼 机器人 2009-09-16  
Hooopo 写道
跪 求原文地址

Hooopo 写道
跪 求原文地址

木有
6 楼 Hooopo 2009-09-16  
跪 求原文地址
5 楼 netfork 2009-09-10  
这篇译的不错。
4 楼 Hooopo 2009-09-09  
以后见你发文章我就踩
3 楼 机器人 2009-09-09  
我删你的留言,当一会大爷的感觉   
2 楼 机器人 2009-09-09  
Hooopo 写道
还真是的,,一会试试去

看了文章,不(顶)一下,我愤怒啊
1 楼 Hooopo 2009-09-09  
还真是的,,一会试试去

相关推荐

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    Rails 101 入门电子书

    ### Rails 101 入门电子书知识点详解 #### 一、简介 《Rails 101 入门电子书》是一本非常适合初学者直接入门的书籍,它由xdite编写并出版于2014年6月10日。本书主要针对的是希望学习Ruby on Rails框架的读者,特别...

    Rails101_by_rails4.0

    《Rails101_by_rails4.0》通过 Lean Publishing 的出版流程,让书籍在发布过程中能够不断吸纳读者的反馈,通过多次迭代优化内容,直至形成一本高质量的自学教程。Lean Publishing是指利用轻量级的工具,快速出版一...

    使用Aptana+Rails开发Rails Web应用(中文)

    在开发Web应用时,Ruby on Rails(简称Rails)框架因其高效、简洁的代码风格和强大的社区支持而备受青睐。Aptana是一款强大的集成开发环境(IDE),尤其适用于Rails项目的开发,它提供了丰富的特性来提升开发效率。...

    rails2-sample

    此外,Rails还内置了许多实用功能,如ActiveRecord(用于数据库交互)、Action View(用于页面渲染)和Action Controller(用于处理用户请求),这些都使得开发者能够快速构建出功能丰富的Web应用程序。 #### 2. ...

    rails指南 中文版

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...

    Rails 101S

    - **作者机制实现**:让文章与用户建立关联,实现“作者”概念。 - **组群功能**:允许用户加入或退出特定组群,增强社区互动性。 - **后台管理系统**:构建一个简单的后台管理系统,方便管理员进行内容管理和用户...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    rails敏捷开发的购物车系统

    首先,让我们了解Rails的MVC架构。模型(Model)负责处理业务逻辑和数据存储,视图(View)用于展示用户界面,而控制器(Controller)作为模型和视图之间的桥梁,处理用户输入并协调二者之间的交互。在购物车系统中...

    中文版rails教程

    Rails以其“约定优于配置”(Convention over Configuration)和“Don't Repeat Yourself”(DRY,不要重复自己)的原则,极大地提高了开发效率和代码可读性,成为了Web2.0时代敏捷开发的首选工具。 在Ruby on ...

    RailsSpace

    第十一章“Searching and browsing”讲述了如何为用户提供搜索和浏览的功能,让他们能够轻松找到感兴趣的内容或用户。这部分内容涉及全文搜索的技术实现以及高效的查询优化策略。 ##### 5.4 头像上传功能 第十二章...

    Rails

    标签 "工具" 可能意味着讨论到了与Rails开发相关的工具,如集成开发环境(IDEs)、包管理器(如Bundler)、测试框架(如RSpec和Capybara)、调试工具等,这些工具能提升开发效率和代码质量。 压缩包子文件的文件...

    rails 项目起步示例

    学习Rails项目起步,你需要熟悉这些核心概念,并掌握如何创建和运行Rails应用,以及如何使用Rails的命令行工具。同时,理解MVC模式和Rails的约定优于配置(Convention Over Configuration, CoC)原则是至关重要的。...

    Rails3常用命令行命令

    这里的`***`代表你想让服务器监听的端口号。默认情况下,Rails应用会在3000端口启动。 Rails3还提供了生成API文档的功能,通过运行: ```bash rake doc:rails ``` 这将在`doc/api`目录下生成一份完整的Rails API...

    rails2.3.2

    在压缩包的文件名称列表中,只有一个条目 "rails",这可能意味着压缩包内包含了 Rails 框架的核心文件,如 gemspec 文件、库文件、初始化脚本等。开发者可以通过解压这个文件,进一步了解 Rails 框架的结构和工作...

    rails本地安装包完整版

    使用gem命令,用户可以直接安装这些本地的gem文件,快速搭建Rails 2.1.0的开发环境。在安装时,需要确保Ruby环境已就绪,并且具备相应的权限。通过这种方式,开发者可以立即开始使用Rails进行Web应用的开发工作。

    railsAPI

    最后,Rails API的应用往往需要与前端框架如React、Vue.js或Angular配合,通过前端路由和状态管理工具构建单页应用(SPA),以提供更好的用户体验。 总的来说,Rails API 提供了一套完整的框架,用于构建高效、易于...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    rails api(文档)

    9. **Rate Limiting**:防止恶意用户或脚本滥用API,Rails API可以通过中间件(如Rack::Attack)实现请求速率限制。 10. **测试**:测试是API开发的关键部分,Rails API支持RSpec、Minitest等多种测试框架,方便...

Global site tag (gtag.js) - Google Analytics