Agile Web Development with Rails 3nd Edition学习笔记-为数据增加校验处理

数据的校验是在model中进行的。所有的model类都从ActiveRecord::Base继承。该基类已经为我们完成了很多的工作,如数据库映射、创建、更新和查询等。
下面我们来说一些常用校验处理的实现方法。这些校验都是通过在product.rb文件的Product类中添加代码来实现的。

1. 校验数据是否为空:
我们可以通过在Product类开始部分添加如下代码来验证title、description和image_url是否为空:
validates_presence_of :title, :description, :image_url

添加了这些代码之后,我们点“New product”链接进入新建页面,在title、description和image url栏中什么都不填,点“create”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
[quote]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[/quote]

2. 校验数据是否是数字:
而对于数字类型的数据来说,则可以添加如下代码来验证是否是数字:
validates_numericality_of :price

添加了这些代码之后,如果price栏中填写非数字数据之后,点“create”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
[quote]1 errors prohibited this product from being saved
There were problems with the following fields:
Price is not a number[/quote]

3. 校验数据的唯一性:
如果要检查某个字段的值的唯一性,如title,我们可以在Product类开始部分添加如下代码:
validates_uniqueness_of :title

这样,在追加一个已经存在的title时,会看到这样的错误信息:
[quote]Title has already been taken[/quote]

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

保存之后,我们再提交前面那个什么都没填的信息时,会看到如下的信息:
[quote]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[/quote]

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文件链接时,我们指定的错误信息将会被显示:
[quote]Image url must be a URL for GIF, JPG or PNG image.[/quote]

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”部分。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值