- 浏览: 216915 次
- 性别:
- 来自: 绍兴
文章分类
最新评论
-
112703013:
你好, 想问个问题 就是我这边上传一个zip文件 大概有100 ...
rails文件上传下载和删除 . -
chen_miao:
qplovechinese 写道 很好!
3q
simple jQuery date-picker plugin 使用 -
qplovechinese:
很好!
simple jQuery date-picker plugin 使用
3 验证辅助方法
Active Record提供了很多预定义的验证辅助方法,在你的类定义中可以直接使用这些方法。这些方法提供了通用的验证规则。每次验证失败,一个错误信息就会添加到对象的errors集合,并且这个信息是和栏目被有效验证有关联的。
每个辅助方法都接受多个属性名,所以一行代码中可以添加几个属性的验证。
它们都接受:on和:message选项,:on选项从:save(默认),:create或者:update中取值。这个值是辅助方法默认的错误信息。使用:message选项能重写辅助方法的错误信息。
3.1 validates_acceptance_of
当表单发送时,验证checkbox是否被选中。一个典型的例子就是需要用户确认接受一些服务条款时。这个验证是非常特殊的,在数据库中并不需要有这样的记录,如果没有这样的栏目,辅助方法会建立一个虚拟属性。
class Person < ActiveRecord::Base
validates_acceptance_of :terms_of_service
end
validates_acceptance_of默认的错误信息是"must be accepted"。
validates_acceptance_of接受:accept选项,判断将被接受的值,默认是"1",也可以改变:
class Person < ActiveRecord::Base
validates_acceptance_of :terms_of_service, :accept => "yes"
end
3.2 validates_associated
当你的一个模型和其它模型有关联,并且需要验证时,可以使用这个辅助方法。当尝试保存对象时,valid?将被每个关联的对象调用。
class Library < ActiveRecord::Base
has_many :books
validates_associated :books
end这个验证将和所有的关联类型一起工作。
validates_associated默认的错误信息是"is invalid"。
3.3 validates_confirmation_of
当你有两个文件栏目接受相同内容时,可以使用这个辅助方法。比如你想确定email地址或者密码。这个验证创建虚拟属性,名字是栏目的名字加上"_confirmation"。
class Person < ActiveRecord::Base
validates_confirmation_of :email
end
在视图模板中,使用类似下面的代码:
<%= text_field :person, :email %>
<%= text_field :person, :email_confirmation %>
email_confirmation不为空时执行这个检测,需要确认还要为确定属性添加一个presence检测。
class Person < ActiveRecord::Base
validates_confirmation_of :email
validates_presence_of :email_confirmation
end
该辅助方法默认的错误信息是"doesn't match confirmation"
3.4 validates_exclusion_of
这个辅助方法验证属于的属不包含给定的设置。
class Account < ActiveRecord::Base
validates_exclusion_of :subdomain, :in => %w(www), :message => "Subdomain {{value}} is reserved."
end
这个辅助有个:in选项,该选项接受不被属性验证承认的值。:in选项有个名别叫:within,使用它们的结果是一样的。这个例子使用了:message选项来显示自己设定的错误信息。
该辅助方法的默认错误信息是"is not included in the list"。
3.5 validates_format_of
该辅助方法验证属性的值是否匹配指定的正则表达式。使用:with来指定这个正则表达式。
class Product < ActiveRecord::Base
validates_format_of :legacy_code, :with => /\A[a-zA-Z]+\Z/, :message => "Only letters allowed"
end
该辅助方法默认的错误信息是"is invalid".
3.6 validates_inclusion_of
验证属性的值是否包含给定的值.
class Coffee < ActiveRecord::Base
validates_inclusion_of :size, :in => %w(small medium large),
:message => "{{value}} is not a valid size"
end
该辅助方法有:in选项,有个别名中叫:within,使用的结果是一样的。
默认的错误信息是"is not included in the list"。
3.7 validates_length_of
验证属性值的长度。由于辅助方法提供了多种选项,所以可以使用不同的方法指定长度的限制:
class Person < ActiveRecord::Base
validates_length_of :name, :minimum => 2
validates_length_of :bio, :maximum => 500
validates_length_of :password, :in => 6..20
validates_length_of :registration_number, :is => 2
end
* :minimum – 不能比指定的长度更小。
* :maximum – 不能比指定的长度更大。
* :in (or :within) – 长度必须在指定的区间以内。
* :is – 长度必须和指定的相同。
辅助方法的默认错误信息依赖于长度验证的类型。可以使用:wrong_length, :too_long和:too_short选项和{{count}}占位符来自己指定。
class Person < ActiveRecord::Base
validates_length_of :bio, :maximum => 1000,
:too_long => "{{count}} characters is the maximum allwed"
end
可以在不同的方法中使用:tokenizer选项分割值。
class Essay < ActiveRecrd::Base
validates_length_of :content,
:minimum => 300,
:maximum => 400,
:tokenizer => lambda {|str| str.scan(/\w+/)},
:too_short => "must have least {{count}} words",
:too_long => "must have at most {{count}} words"
end
validates_length_of有一个别名叫validates_size_of。
3.8 validates_numericality_of
验证属性的值是否为数字。默认情况下匹配整数和浮点数。也可以把:only_iteger设为true,来具体指定只匹配整数。
如果:only_integer设为true,那么将使用:
/\A[+-]?\d+\Z/
使用正则表达式验证属性值。否则,就尝试使用浮点数来转换值。
上述的正则表达式允许跟一个换行符。
class Player < ActiveRecord::Base
validates_numericality_of :points
validates_numericality_of :games_played, :only_integer => true
end
辅助方法另外还有一些选项增加验证的限制:
* :greater_than 指定的值必须比提供的值大。
* :greater_than_or_equal_to 指定的值必须大于或等于提供的值。
* :equal_to 指定的值必须等于提供的值。
* :less_than 指定的值必须比提供的值小。
* :less_than_or_equal_to 指定的值必须小于或等于提供的值。
* :odd 指定的值必须是奇数
* :even 指定的值必须是偶数
辅助方法默认的错误信息是"is not a number"。
3.9 validates_presence_of
辅助方法验证属性不为空。如果值是nil或者一个空白字符串,就使用black?方法来检测。
class Person < ActiveRecord::Base
validates_presence_of :name, :login, :email
end
测试联接模型的外键:
class LineItem < ActiveRecord::Base
belongs_to :order
validates_presence_of :order_id
end
自此,false.blank?返回true,如果你想要验证一个布尔型的字段是否有值,就要使用validates_inclusion_of :field_name, :in => [true, false]。
默认的错误信息是"can't be empty"。
3.10 validates_uniqueness_of
验证属性的值的唯一性。
class Account < ActiveRecord::Base
validates_uniqueness_of :email
end
这个验证是通过数据库查询看是否有相同记录,如果有就视为无效的数据。
:scope选项能让你使用指定的其他属性,用于限制的唯一性检查。
class Holiday < ActiveRecord::Base
validates_uniqueness_of :name, :scope => :year,
:message = "should happen once per year"
end
使用:case_sensitive选项定义是否区分大小写。默认值是true,也就是区分大小写。
class Person < ActiveRecord::Base
validates_uniqueness_of :name, :case_sensitive => false
end
默认的错误信息是"has already been taken"。
3.11 validates_each
没有预定义的验证函数时,可以使用block来创建。通过validates_each来测试。下面的例子中,不想让name和surname由小写字母开头:
class Person < ActiveRecord::Base
validates_each :name, :surname do |model, attr, value|
model.erros.add(attr, "must start with upper case") if value =~ /\A[a-z]/
end
end
4 通用的验证选项
验证辅助方法中除了:if和:unless还有一些通用的选项。
4.1 :allow_nil
当一个值为nil时,会跳过验证。在validates_presence_of中使用:allow_nil会允许nil,但是其它为blank的会被拒绝。
class Coffee < ActiveRecord::Base
validates_inclusion_of :size, :in => %w(small medium large),
:message => "{{value}} is not a valid size", :allow_nil => true
end
end
4.2 :allow_blank
和:allow_nil类似,如果属性的值是空白允许通过验证。
class Topic < ActiveRecord::Base
validates_length_of :title, :is => 5, :allow_blank => true
end
Topic.create("title" => "").valid? # => true
Topic.create("title" => nil).valid? # => true
4.3 :message
自定义错误信息,并添加到erros集合中。当不使用这个选项时,Active Record将使用默认的值。
4.4 :on
:on选项指定在发生什么行为时执行验证,默认情况是对象保存的时候。可以使用:on => :create或者:on => :update来自己指定。
class Person < ActiveRecord::Base
validates_uniqueness_of :email, :on => :create
validates_numericality_of :age, :on => :update
validates_presence_of :name, :on => :save
end
发表评论
-
require,include,load,extend的用途和区别
2013-03-01 22:47 986这四个方法还是很好玩很有用,也是比较容易混的。 ... -
ruby 标准类型总结
2013-02-01 16:45 1255一、数字 Ruby支持整数 ... -
RMagick 简介
2013-01-18 20:38 1426RMagick 是一个将 Ruby 语言绑定到 ImageM ... -
ARP欺骗功能
2013-01-12 22:47 1166一、设置前准备 当使用了防止ARP欺骗功能(IP和 ... -
淘宝开源编辑器KISSY Editor
2013-01-04 16:46 2391KISSY Editor 是开源项目 KISSY ... -
Rails创建定时任务
2012-12-10 10:21 1874Task & Rexcel 最终生成的报 ... -
Ruby on Rails页面缓存 实践
2012-12-05 11:02 1082三种方式 Page Caching, Action ... -
rails缓存学习
2012-11-27 16:38 1916FORM:http://kenbeit.com/tag/ ... -
Ruby on Rails 简单页面缓存
2012-11-16 17:28 1242三种方式 Page Caching, Action Ca ... -
Ruby写入Excel文件 插件方法
2012-11-01 16:21 1535spreadsheet插件(主要是excel生成写入数 ... -
RUBY操作EXCEL文件
2012-10-31 17:05 1429使用ruby来操作excel文 ... -
Ruby on Rails的session和session存储方案
2012-10-18 17:42 1306session:页面间的信息保存手段。使用:赋值 ses ... -
Ruby程序打包成可执行文件的工具 - RubyScript2Exe
2012-09-19 21:28 2287RubyScript2Exe能够将你的Ruby应用程序转成一个 ... -
rails中实现kindeditor中的图片上传
2012-09-14 16:10 1663FROM: http://blog.sina.co ... -
js 彷excel 键盘上下左右移动
2012-09-03 19:11 3054思路假设初始坐标为(0,0)首先要算出表格的最大最小坐标 即( ... -
ruby Hash 总结
2012-08-31 18:51 63311. 如何创建Hash? x = Hash.newx = { ... -
ruby inject,循环计算优化
2012-08-27 16:51 1336From:http://blog.jayfields.com/ ... -
jquery 图表插件highcharts & highstock
2012-08-23 14:43 11225Highcharts是纯JavaScript编写的图表库,提 ... -
rails or ruby 中 fields_for 提交方式
2012-08-20 20:10 1646Project这个Model的new表单,我们需要在创建Pro ... -
Rails中导出excel的快速简便的方法
2012-07-31 15:51 1101controller def to_e ...
相关推荐
5. **回调**: 在模型的生命周期中可以定义各种回调函数,例如在保存之前或之后执行某些操作。 6. **自定义方法**: 可以在模型类中定义自定义的方法,实现特定的业务逻辑。 #### 五、高级用法 1. **分页**: 使用...
ActiveRecord支持在特定生命周期事件(如创建、更新、删除等)前后执行的回调函数。例如,`before_save :normalize_email`会在保存用户前自动规范化电子邮件地址。 8. **序列化** ActiveRecord允许你序列化复杂的...
允许保存记录而无需调用回调和验证。 正在安装 $ gem install sneaky-save 或放入您的gemfile以获取最新版本: gem 'sneaky-save' , git : 'git://github.com/einzige/sneaky-save.git' 使用 # Update. Returns ...
事务(基于异步钩子,因此您无需将代码包装到回调中) 基于knex.js(因此您拥有knex查询构建器的所有功能) 声明范围,关系,验证 Yaml夹具,用于播种测试数据并在测试中使用 级联保存 包含有限状态机 容易的多态...
在ActiveModel中,可以通过定义一个验证方法并在`validate`回调中调用来实现。下面是一个简单的示例: ```ruby class MyModel attr_accessor :input_array validate :intersection_validation private def ...
开发人员使用ActiveRecord所做的大部分工作都使数据模型对所有使用者都具有相同的功能(通过使用验证和回调),而Ecto鼓励使用不太严格的行为。 尽管可以在ActiveRecord中定义这些边界(请考虑 ),但是某些应用...
- **回调**:解释ActiveRecord中可用的生命周期回调,以及如何利用这些回调增强模型的功能。 - **迁移**:介绍如何使用迁移来管理和维护数据库结构的变化。 #### ActiveRecord迁移 - **迁移概述**:解释迁移的概念...
2. **自定义验证**:除了预定义的验证外,开发者还可以创建自定义验证方法,通过添加`validate`或`validate_on_create`等回调来执行特定的验证逻辑。 3. **回调(Callbacks)**:Ruby on Rails中的回调机制允许在...
但是,我们不想失去ActiveRecord的便利,例如验证,回调等。 用例示例是支持登录的模型: class SignIn < ActiveType :: Object # this is not backed by a db table attribute :username , :string ...
目标了解AR生命周期方法的概念使用before_save , before_create和before_validation 了解何时使用before_validation与before_save回呼现在,我们将ActiveRecord集成到Rails中,我们应该注意,只要模型中发生某些...
我们在这里介绍的所有内容都称为“活动记录生命周期回调”。 很多人都称它们为回调。 有点短。 看一下其中包含的博客应用程序。 在开始向Rails学习之前,请确保运行迁移(我们使用rake db:migrate做到了!)! ...
我们在这里介绍的所有内容都称为“活动记录生命周期回调”。很多人都称它们为回调。有点短。 看一下其中包含的博客应用程序。在开始向Rails学习之前,请确保运行迁移(我们使用rake db:migrate做到了!)!我们有一...
serialize_has_many 将has_many关系序列化为单个列,同时仍在进行属性,验证,回调,嵌套表单和fields_for。 使用ActiveRecord轻松实现NoSQL!安装将此行添加到您的应用程序的Gemfile中: gem 'serialize_has_many' ...
- **关联、验证及回调**:深入讲解ActiveRecord中的关联关系(如一对一、一对多等),以及如何进行数据验证和回调函数的应用。 - **ActionView表单**:学习如何在视图层构建动态表单,利用ActionView提供的模板...
Sequel Activemodel的结合使得在Sequel中可以使用ActiveRecord的一些特性,如验证、序列化和回调等,增强了Sequel的功能性和灵活性。 首先,我们来看看Sequel的核心概念。Sequel的核心是Dataset对象,它代表了...
OmniAuth 中间件会处理这个回调,解析出用户的标识符(通常称为 "uid")和其他信息,然后这些信息可以通过 `request.env['omniauth.auth']` 访问。 OmniAuth 还提供了丰富的自定义选项,比如可以在回调处理中添加...
5. **Callbacks**:回调机制,可以在特定事件(如`before_create`、`after_update`等)发生时执行代码。 6. **Typecasting**:类型转换,允许你指定属性的类型,如`attribute :age, type: Integer`,自动将字符串...
在2.3.3版中,ActiveRecord支持复杂的查询,如关联(associations)和回调(callbacks),以及ActiveRecord验证(validations)确保数据的完整性。 3. **ActionController**:处理HTTP请求并生成响应。在2.3.3中,...
2. **配置 API 访问凭证**:在 Laravel 的 `.env` 文件中设置 Beyonic 的 API 密钥和回调URL。 3. **创建支付请求**:利用 Beyonic PHP 客户端库,编写支付逻辑,生成支付请求,并将请求信息展示给用户。 4. **处理...
它提供了MVC(Model-View-Controller)架构模式,数据库访问对象(DAO)、ActiveRecord模式、缓存、身份验证和权限控制等特性,以提高开发效率和应用性能。 2. **REST API**:REST(Representational State ...