- 浏览: 29403 次
- 性别:
- 来自: 苏州
最新评论
Agile Web Development with Rails 3nd Edition学习笔记-为数据增加校验处理
- 博客分类:
- Ruby and Rails
数据的校验是在model中进行的。所有的model类都从ActiveRecord::Base继承。该基类已经为我们完成了很多的工作,如数据库映射、创建、更新和查询等。
下面我们来说一些常用校验处理的实现方法。这些校验都是通过在product.rb文件的Product类中添加代码来实现的。
1. 校验数据是否为空:
我们可以通过在Product类开始部分添加如下代码来验证title、description和image_url是否为空:
添加了这些代码之后,我们点“New product”链接进入新建页面,在title、description和image url栏中什么都不填,点“create”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
2. 校验数据是否是数字:
而对于数字类型的数据来说,则可以添加如下代码来验证是否是数字:
添加了这些代码之后,如果price栏中填写非数字数据之后,点“create”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
3. 校验数据的唯一性:
如果要检查某个字段的值的唯一性,如title,我们可以在Product类开始部分添加如下代码:
这样,在追加一个已经存在的title时,会看到这样的错误信息:
4. 校验数据范围:
对于像price这样的价格数据,在填写的时候,我们希望该值必须是一个大于0.01的值时,我们需要添加一个保护类型的方法来进行处理。并且,这个方法需要注册给基类的validate方法来调用。
首先,我们注册一个叫price_must_be_at_least_a_cent的方法给基类的validate,在Product类开始部分添加如下代码:
接着,我们定义该方法:
保存之后,我们再提交前面那个什么都没填的信息时,会看到如下的信息:
5. 校验数据格式:
对于像image这样的字段,如果我们要检查它的文件格式,则可以添加如下代码:
这样,我们可以看到当我们添加一个不符合我们指定的格式的Image文件链接时,我们指定的错误信息将会被显示:
6. 校验数据的长度:
如果要校验数据的长度,可以使用“validates_length_of”。我们以title为例,如果我们希望每个产品的title长度不超过32个字符,我们可以使用如下的代码:
如果希望至少有5个字符,则可以使用如下代码:
那么,如果希望是大于等于5个字符,又同时小于等于32个字符呢?那就这样写:
上面给出了一些常用的数据校验的方法。一般来说Rails提供了默认的错误信息。但是如果我们希望使用我们自己定义的错误信息的话,可以简单的在代码中加入“:message”来完成这个需求。以长度校验为例,我们可以这样指定我们的错误信息:
其它更多的校验方法参见《Agile Web Development with Rails 3nd Edition》第399开始的“Validation Helpers”部分。
下面我们来说一些常用校验处理的实现方法。这些校验都是通过在product.rb文件的Product类中添加代码来实现的。
1. 校验数据是否为空:
我们可以通过在Product类开始部分添加如下代码来验证title、description和image_url是否为空:
validates_presence_of :title, :description, :image_url
添加了这些代码之后,我们点“New product”链接进入新建页面,在title、description和image url栏中什么都不填,点“create”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
引用
5 errors prohibited this product from being saved
There were problems with the following fields:
Image url can't be blank
Title can't be blank
Description can't be blank
There were problems with the following fields:
Image url can't be blank
Title can't be blank
Description can't be blank
2. 校验数据是否是数字:
而对于数字类型的数据来说,则可以添加如下代码来验证是否是数字:
validates_numericality_of :price
添加了这些代码之后,如果price栏中填写非数字数据之后,点“create”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
引用
1 errors prohibited this product from being saved
There were problems with the following fields:
Price is not a number
There were problems with the following fields:
Price is not a number
3. 校验数据的唯一性:
如果要检查某个字段的值的唯一性,如title,我们可以在Product类开始部分添加如下代码:
validates_uniqueness_of :title
这样,在追加一个已经存在的title时,会看到这样的错误信息:
引用
Title has already been taken
4. 校验数据范围:
对于像price这样的价格数据,在填写的时候,我们希望该值必须是一个大于0.01的值时,我们需要添加一个保护类型的方法来进行处理。并且,这个方法需要注册给基类的validate方法来调用。
首先,我们注册一个叫price_must_be_at_least_a_cent的方法给基类的validate,在Product类开始部分添加如下代码:
validate :price_must_be_at_least_a_cent
接着,我们定义该方法:
protected def price_must_be_at_least_a_cent errors.add(:price, 'should be at least 0.01') if price.nil? || price < 0.01 end
保存之后,我们再提交前面那个什么都没填的信息时,会看到如下的信息:
引用
5 errors prohibited this product from being saved
There were problems with the following fields:
Price is not a number
Price should be at least 0.01
Image url can't be blank
Title can't be blank
Description can't be blank
There were problems with the following fields:
Price is not a number
Price should be at least 0.01
Image url can't be blank
Title can't be blank
Description can't be blank
5. 校验数据格式:
对于像image这样的字段,如果我们要检查它的文件格式,则可以添加如下代码:
validates_format_of :image_url, :with => %r{\.(gif|jpg|png)$}i, :message => 'must be a URL for GIF, JPG ' + 'or PNG image.'
这样,我们可以看到当我们添加一个不符合我们指定的格式的Image文件链接时,我们指定的错误信息将会被显示:
引用
Image url must be a URL for GIF, JPG or PNG image.
6. 校验数据的长度:
如果要校验数据的长度,可以使用“validates_length_of”。我们以title为例,如果我们希望每个产品的title长度不超过32个字符,我们可以使用如下的代码:
validates_length_of :title :maximum => 32
如果希望至少有5个字符,则可以使用如下代码:
validates_length_of :title :minimum => 5
那么,如果希望是大于等于5个字符,又同时小于等于32个字符呢?那就这样写:
validates_length_of :title :in => 5..32
上面给出了一些常用的数据校验的方法。一般来说Rails提供了默认的错误信息。但是如果我们希望使用我们自己定义的错误信息的话,可以简单的在代码中加入“:message”来完成这个需求。以长度校验为例,我们可以这样指定我们的错误信息:
validates_length_of :title :maximun => 32 :message => "seems too long"
其它更多的校验方法参见《Agile Web Development with Rails 3nd Edition》第399开始的“Validation Helpers”部分。
发表评论
-
Agile Web Development with Rails 3nd Edition学习笔记-隐藏空的购物车
2010-04-29 23:19 1002到现在位置,我们已经完成了产品列表和购物车功能。虽然看起来已经 ... -
Agile Web Development with Rails 3nd Edition学习笔记-高亮显示改变
2010-04-28 22:24 831当客户点击了“Add to Cart“按钮之后,购物车的数据改 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建一个基于Ajax的购物车
2010-04-27 22:59 901上篇笔记中,我们通过partial把购物车信息放到了index ... -
Agile Web Development with Rails 3nd Edition学习笔记-使用Ajax将购物车放入Sidebar
2010-04-27 00:38 1013之前,当用户点击了“Add to Cart“按钮之后,页面会跳 ... -
Agile Web Development with Rails 3nd Edition学习笔记-完成购物车
2010-04-26 22:41 829这一篇,我们来完成我们的购物车的制作吧。 首先,为了客户能够很 ... -
Agile Web Development with Rails 3nd Edition学习笔记-错误处理
2010-04-26 22:07 796这一部分其实东西很少,这里不做过多的描述,仅仅是记录下来,以便 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建更智能的购物车
2010-04-25 17:05 770上篇笔记我们已经让我们的网站能够保存客户选购的产品了,但是,似 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建购物车
2010-04-23 22:06 856上篇笔记中,我们为保 ... -
Agile Web Development with Rails 3nd Edition学习笔记-把Sessions放进数据库
2010-04-21 22:21 988depot在线商店需要一个能保存用户选购的各种各样的商品的地方 ... -
Agile Web Development with Rails 3nd Edition学习笔记-格式化价格和添加购物按钮
2010-04-19 22:42 1007这篇只有很少的一点内 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建页面布局模板
2010-04-19 01:32 972典型的网站一般都具有 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建产品目录列表
2010-04-18 19:48 761按照书上的引导,我们 ... -
Agile Web Development with Rails 3nd Edition学习笔记-美化我们的程序
2010-04-18 18:37 998我们的程序现在显示出来的画面还是那么的原始和难看,接下来我们要 ... -
Agile Web Development with Rails 3nd Edition学习笔记-向数据库表追加字段
2010-04-18 00:07 893我们可以使用migration工具在存在的数据库表中追加字 ... -
Agile Web Development with Rails 3nd Edition学习笔记-创建Depot工程
2010-04-17 21:21 893开始学习ROR了,由于在开始跟着书做这个Depot工程 ...
相关推荐
Agile Web Development with Rails 3nd Edition beta
Agile Web Development with Rails 3nd Edition Beta
Agile Web Development with Rails, 2nd Edition <br>有两份PDF文件,大小分别是7.39MB和6.55MB <br>作者: Dave Thomas , David Heinemeier Hansson , Leon Breedt , Mike Clark , James Duncan Davidson ,...
Agile Web Development with Rails 5 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书...
Pragmatic - Agile Web Development with Rails 2ndPragmatic - Agile Web Development with Rails 2ndPragmatic - Agile Web Development with Rails 2ndPragmatic - Agile Web Development with Rails 2...
Agile Web Development with Rails 2nd Edition
Agile Web Development with Rails 2nd Edition源码
Agile Web Development with Rails
Agile Web Development with Rails (PDF)
Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details., Tens of thousands of ...
Rails敏捷开发第三版,很不错的rails入门书,对初学rails的人很有用
Agile Web Development with Rails (4th edition).pdf
没什么好介绍的beta版,pdf 第四版,包括Rails 3的内容。
Agile Web Development with Rails.
Agile Web Development with Rails 1-14节_ppt(老师发的修正版)
Agile Web Development with Rails, Third Edition by Sam Ruby, Dave Thomas, David Heinemeier Hansson Rails just keeps on changing. Rails 2, released in 2008, brings hundreds of improvements, including...
agile web development with rails 4th edition正式版的对应源代码 就是一些Rails3的项目程序代码