`
tiny.strimp
  • 浏览: 29403 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

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”按钮提交数据,这时,我们会看到页面的顶端会显示如下信息:
   
引用
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


  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


  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


  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”部分。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics