`
mike.gao
  • 浏览: 48278 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

rails 验证自定义方法

阅读更多
可以自定义validate(), 这个方法在每次保存数据时都会被调用.
如:
def validate
if name.blank? && email.blank?
errors.add_to_base("You mustspecify a name or an email address")
end
end

同时也可以自定义 validate_on_create(),validate_on_update()方法.
valid?()方法可以随时调用,用来测试数据是否能通过校验
返回的错误信息可用 error_messages_for(model)方法显示.
如:<%= error_messages_for 'article' %>

校验大全:
validates_acceptance_of
指定checkbox应该选中. (如:(*)我同意条款)
用法:validates_acceptance_of attr... [ options...]
参数:message text    默认:“mustbe accepted.”
:on :save,:create, or :update
实例:
class Order < ActiveRecord::Base
validates_acceptance_of:terms,
:message=> "Please accept the terms to proceed"
end
validates_associated
查验指定的object.
用法:validates_associated name... [ options...]
参数:message text 默认: is “is invalid.”
:on :save,:create, or :update
实例:
class Order < ActiveRecord::Base
has_many :line_items
belongs_to :user
validates_associated:line_items,
:message=> "are messed up"
validates_associated:user
end
validates_confirmation_of
数据重校
用法:validates_confirmation_of attr... [options... ]
参数:message text 默认 “doesn’t matchconfirmation.”
:on :save,:create, or :update
实例:
对密码表:
<%= password_field "user", "password"%><br />
<%= password_field "user","password_confirmation" %><br />
#第二表名为xxxx_confirmation
class User < ActiveRecord::Base
validates_confirmation_of:password
end
validates_each
使用block检验一个或一个以上参数.
用法:validates_each attr... [ options... ] {|model, attr, value| ... }
参数:allow_nilboolean 设为true时跳过nil对象.
:on :save,:create, or :update
实例:
class User < ActiveRecord::Base
validates_each :name, :email do|model, attr, value|
ifvalue =~ /groucho|harpo|chico/i
model.errors.add(attr,"Youcan't be serious, #{value}")
end
end
end
validates_exclusion_of
确定被检对象不包括指定数据
用法:validates_exclusion_of attr..., :in =>enum [ options... ]
#enum指一切可用include?()判断的范围.
参数:allow_nil 设为true将直接跳过nil对象.
:in (or:within) enumerable
:message text默认为: “is not included in the list.”
:on :save,:create, or :update
实例:
class User < ActiveRecord::Base
validates_exclusion_of:genre,
:in=> %w{ polka twostep foxtrot },
:message=>"no wild music allowed"
validates_exclusion_of:age,
:in=> 13..19,
:message=>"cannot be a teenager"
end
validates_inclusion_of
确认对象包括在指定范围
用法:validates_inclusion_of attr..., :in =>enum [ options... ]
参数:allow_nil 设为true直接跳过nil对象
:in (or:within) enumerable An enumerable object.
:message text默认:“is not included in the list.”
:on :save,:create, or :update
实例:
class User < ActiveRecord::Base
validates_inclusion_of:gender,
:in=> %w{ male female },
:message=>"should be 'male' or 'female'"
validates_inclusion_of:age,
:in=> 0..130,
:message=>"should be between 0 and 130"
end
validates_format_of
用正则检验对象
用法:validates_format_of attr..., :with =>regexp [ options... ]
参数:message text 默认为: “is invalid.”
:on :save,:create, or :update
:with正则表达式
实例:
class User < ActiveRecord::Base
validates_format_of :length,:with => /^\d+(in|cm)/
end
validates_length_of
检查对象长度
用法:validates_length_of attr..., [ options...]
参数:in (or :within) range
:isinteger
:minimuminteger
:maximuminteger
:message text默认文字会根据参数变动,可使用%d取代确定的最大,最小或指定数据.
:on :save,:create, or :update
:too_longtext 当使用了 :maximum后的 :message
:too_shorttext ( :minimum )
:wrong_length( :is)
实例:
class User < ActiveRecord::Base
validates_length_of :name,:maximum => 50
validates_length_of :password,:in => 6..20
validates_length_of :address,:minimum => 10,
:message=>"seems too short"
end
validates_numericality_of
检验对象是否为数值
用法:validates_numericality_of attr... [options... ]
参数:message text 默认 “is not a number.”
:on :save,:create, or :update
:only_integer
实例:
class User < ActiveRecord::Base
validates_numericality_of:height_in_meters
validates_numericality_of :age,:only_integer => true
end
validates_presence_of
检验对象是否为空
用法:validates_presence_of attr... [ options...]
参数:message text 默认:“can’t be empty.”
:on :save,:create, or :update
实例:
class User < ActiveRecord::Base
validates_presence_of :name,:address
end
validates_uniqueness_of
检验对象是否不重复
用法:validates_uniqueness_of attr... [ options...]
参数:message text 默认: “has already beentaken.”
:on :save,:create, or :update
:scope attr指定范围
实例:
class User < ActiveRecord::Base
validates_uniqueness_of:name
end
class User < ActiveRecord::Base
validates_uniqueness_of :name,:scope =>"group_id"
end
#指定在同一group_id的条件下不重复.

常用正则:

E-Mail地址格式:
validates_format_of      :email,
:with        => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i,
:message     => 'email must be valid'

网址格式:
validates_uri_existence_of :url, :with =>
/(^$)|(^(http|https)://[a-z0-9] ([-.]{1}[a-z0-9])*.[a-z]{2,5}(([0-9]{1,5})?/.*)?$)/ix
分享到:
评论

相关推荐

    Ruby-ActiveModel的自定义验证用于检查数组是否包含在另一个中

    这个标题提到的"Ruby-ActiveModel的自定义验证用于检查数组是否包含在另一个中"是一个具体的验证场景,常常在数据校验时会用到,比如确保用户输入的数据符合特定的范围或者限制。 自定义验证是ActiveModel的一个...

    Rails 101 入门电子书

    - 测试安装: 创建一个简单的Rails应用来验证是否成功安装。 #### 五、练习作业0-Hello World - **目标**: - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器...

    Ruby on Rails 指南 v5.0.1 中文版

    - **数据验证辅助方法**:列出常用的验证辅助方法,如`validates_presence_of`、`validates_uniqueness_of`等。 - **常用的验证选项**:介绍在验证规则中常用的选项,如`message`、`if`、`unless`等。 - **严格验证*...

    Rails项目源代码

    `config/routes.rb`文件定义了所有路由规则,包括资源路由、命名路由和自定义路由。 6. **视图模板**: 视图使用ERB(Embedded Ruby)或更现代的Haml、Slim等模板语言,结合HTML来渲染用户界面。图片的展示、上传...

    rails本地安装包完整版

    Rails 2.1.0引入了许多新特性,例如活动记录(ActiveRecord)的自动保存关联、部分渲染以及自定义验证选项等。 7. **activerecord-2.1.0.gem**:ActiveRecord是Rails中的ORM(对象关系映射)库,负责将数据库表映射...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。...在实际操作中,参考Rails的官方文档和社区资源将是提升技能的好方法。

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    这个中间件提供了与微信API交互的功能,包括验证微信服务器的请求、处理用户消息、以及发送自定义响应。下面将详细介绍这个中间件的工作原理、主要功能及其在实际应用中的使用方法。 1. **工作原理**: `weixin_...

    Rails 3 in Action

    4. **路由**:Rails的路由系统允许灵活地定义URL到控制器动作的映射,书中介绍了如何设置资源路由、命名路由和自定义路由规则。 5. **ActiveRecord**:详述了ActiveRecord是如何作为对象关系映射(ORM)层工作的,...

    Rails进行敏捷Web开发(所有版本的源码rails3.0-4.0)

    此外,`rails generate scaffold`命令也变得更加灵活,可以自定义模板。 4. Rails 4.0: Rails 4带来了大量的改变和优化。最显著的是加入了Strong Parameters,提高了安全性,避免了Mass Assignment漏洞。另外,它...

    rails日期控件

    Rails框架中的日期控件是开发Web应用时常用的一种交互组件,它允许...以上就是Rails日期控件的相关知识点,通过合理利用Rails的辅助方法和自定义样式,可以创建功能强大且美观的日期输入组件,提升Web应用的用户体验。

    自定义设计身份验证逻辑并仍然与所有其他设计.zip

    2. **模型扩展**:在User模型中,你可以添加自定义方法或属性来扩展Devise的功能。比如,添加一个`is_admin?`方法来判断用户是否是管理员,或者定义一个`last_active`字段记录用户最后活跃的时间。 3. **路由配置**...

    rails-api-4.0.0

    在API中,模型主要用于验证数据、定义关联关系和业务逻辑。 六、错误处理: API应该提供清晰的错误信息,以便客户端能够理解问题所在。可以通过rescue_from或自定义异常类来捕获和处理错误。 七、安全与认证: API...

    Ruby on Rails源代码

    通过阅读源代码,你可以了解如何设置资源路由、命名路由、自定义路由以及如何处理参数。 2. **ActiveRecord**:作为ORM(对象关系映射)层,ActiveRecord使得Ruby对象与数据库表之间的交互变得简单。源代码中的`app...

    [Rails 常用插件简介]CRUD Generator 2

    比如,你可能需要自定义验证规则、关联关系、或者视图中的样式和布局。理解生成的代码结构,能够帮助你更高效地进行定制。 **5. CRUD Generator 2的优缺点** 优点: - 快速生成基本的CRUD功能,节省开发时间。 - ...

    Ruby-validatestimelinessActiveModel和Rails的日期与时间验证插件

    在Rails中,ActiveRecord默认提供了多种验证方法,如`validates_length_of`、`validates_numericality_of`等,但这些方法对日期和时间的处理并不全面。`validates_timeliness` 插件则填补了这一空白,它支持以下功能...

    Ruby-Devise一个基于Warden的Rails灵活身份验证解决方案

    这个库是基于Warden,一个通用的身份验证库,允许Devise在Rails应用中实现自定义的身份验证逻辑。 Devise的主要特点包括: 1. **模块化**:Devise通过一系列可插入的模块来实现不同的功能,如确认、密码重置、记住...

    rails 2.0.2 分页 需另外下载插件

    - **自定义查询**:可以在`paginate`方法内部嵌入更复杂的查询条件。 总之,`will_paginate`为Rails 2.0.2版本的分页需求提供了一个高效且易于使用的解决方案。尽管Rails 2.x已经很老,但这个插件依然在很多旧项目...

    Rails入门教程一(翻译).pdf

    此外,Rails提供了丰富的插件和gem(Ruby gem),例如Devise用于身份验证,CanCanCan处理授权,Paperclip或Carrierwave用于文件上传等,这些都能极大地增强应用的功能。 在开发过程中,Rails还提供了TDD(测试驱动...

    rails上传文件_paperclip

    在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...

Global site tag (gtag.js) - Google Analytics