- 浏览: 29389 次
- 性别:
- 来自: 上海
最新评论
文章列表
version Rails 4.1
6. 执行个性化校验
当内建的校验辅助方法不能满足你的需求时, 你能够写你自己更喜欢的校验类或者校验方法.
6.1 Custom Validators 个性化校验
个性化校验是类(class), 该类继承ActiveModel::Validator. 这些类必须实现一个validate方法, 它会带入一个record作为一个参数, 然后对这个record执行校验. 个性化校验是通过使用 validates_with 方法来被调用的.
class MyValidator < ActiveModel::Validat ...
version: Rails 4.1
5. 条件校验
有时当被给予的断言是满足条件的,才能去校验这个对象。你可以通过使用 :if 和 :unless 选项来实现,后面跟着的是一个标志,一个字符串,一段代码或者一个数组。当你想要执行校验时,你可以使用 :if 选项。当你想要不让校验发生时,那么你可以使用 :unless 选项。
5.1 Using a Symbol with :if and :unless 使用一个标志通过 :if 和 :unless
version: Rails 4.1
严格校验
你也可以指定校验为严格的,当对象无效时,抛出异常 ActiveModel::StrictValidationFailed。
version: Rails 4.1
3 Common Validation Options 通常的校验选项
下面是一些通常的校验选项:
3.1 :allow_nil
当值被检查到是 nil 的时候,:allow_nil 选项跳过校验。
classCoffee < ActiveRecord::Base
validates :size, inclusion: { in: %w(small medium large),
message: "%{value} is not a valid size"}, allow_nil: true ...
version: Rails 4.1
2 Validation Helpers 校验辅助方法
Active Record 提供了许多预定义的校验辅助方法(helpers), 你可以直接在你的类定义中使用. 这些辅助方法提供了一般性校验的规则. 每一次校验失败时, 一个错误信息被增加到对象的 errors 集合, 这个信息被关联到已被校验的属性.
每一个helper 接受属性名称的任意数量, 因此对于单独行的代码, 你可以对几个属性增加相同类型的校验.
他们都接受属性 :on 和 :message, 当校验被运行时定义上述属性, 当校验失败时, 把相应的错误信息增加到 ...
version Rails 4.1
Active Record 校验
这份教程教你如何去校验对象的状态, 在他们进数据库之前, 使用 Active Record 的校验特征.
阅读完这份教程, 你将会知道:
如何去使用内建的Active Record 校验helpers.
如何去创建你自己定制化的校验方法.
如何在校验的过程中去获取生成的错误信息.
1 Validations Overview 校验概述
这里是一个非常简单的校验例子:
class Person < ActiveRecord::Base
...
version: Rails 4.1
9 Migrations and Seed Data 数据迁移和生成数据
一些人使用数据迁移来给数据库增加数据:
class AddInitialProducts < ActiveRecord::Migration
def up
version: Rails 4.1
8 Active Record and Referential Integrity 相关的完整性
Active Record 一直要求的是把智能化放在你的模型中, 而不是数据库中. 同样地, 类似于触发器或者外键限制的特征不能被过度使用, 这样会把一些智能化放回至数据库中.
类似于 validates :foreign_key, uniqueness :true 的验证是一种方式, 用在模型中能够保持数据的完整性. 属性 :dependent 在关联性上允许模型自动化地来销毁子对象, 是在当父对象被销毁的时候. 就如同那些在应用级的操 ...
version: Rails 4.1
7 Schema Dumping and You 数据库模式输出
7.1 What are Schema Files for? 数据库模式文件是为了什么?
基本上就是 Migrations,对于你的数据库模式而言,Migrations 是没有验证的代码。其作用就是形成由 Active Record 产生的 db/schema.rb 或者 一个 SQL 文件, 用来测试数据库的. 他们不是被设计成用来编辑的, 他们仅仅只是显示数据库当前的状态.
对于部署一个应用的实例用来回放整个数据迁移文件(migration) 的历史而言, 这不是必 ...
version: Rails 4.1
当在一个数据迁移文件(migration)里创建或者修改数据时, 通常比较吸引人的做法是使用你的模型中的一个. 毕竟, 他们的存在是为了提供更便捷的读取那些潜在的数据. 这是能够实现的, 但有些警告应该要被注意到.
例如, 问题的产生是在模型使用数据列时,1)这些数据列没有存在于数据库中 2)将会被这个或者随后的 migration 来创建。
考虑这个例子,Alice 和 Bob 共同工作于同一个代码,包含一个 Product 模型:
Bob 度假去了。
Alice 创建了一个 数据迁移文件(migration) 服务于 ...
version: rails 4.1
当在编辑数据迁移文件(migration)时, 偶尔地, 你难免也会犯下错误. 如果你已经开始运行数据迁移文件( migration)了, 那么你就不能再编辑这个数据迁移文件(migration)了, 以及去再一次地运行migration: 当你开始运行 rake db:migrate 时, Rails 会觉得它已经运行这个 migration了, 因此也就无能为力了. 你必然要回滚这个 migration (例如用 rake db:rollback), 编辑你的 migration, 然后运行 rake db:migrate 找到那个正确的版本.
...
version: rails 4.1
4 运行 migrations
Rails 提供了一个 Rake 任务的集合,用来运行 migrations 的某个集合。
你将会使用的关于 Rake 任务的第一个数据前置的指令可能是 rake db:migrate。在它的最基本的form中,为了所有的还没有运行的 migrations, 它仅仅运行 change 或者 up 方法。如果还没有这样的 migrations,它就存在了。它将会按顺序,基于migration的日期来运行这些数据迁移。
注意,运行 db:migrate 任务也会调用 db:schema:dump 任务, ...
version: rails 4.1
3 编写数据迁移
一旦你已经创建了你的 migration,使用的是生成器中的一个,现在是时候让它工作了!
3.1 Creating a Table 创建表
create_table 方法是最基本方法之一,但大多数时候,使用一个 model 或者 scaffold 生成器来为你生成数据表。基本的用法如下:
create_table :productsdo|t|
t.string :name
end
这创建了一个 products 数据表,有一个数据列名为 name (下面将会讨论这个,一个隐式的数据列)。
默认的情况 ...
version: rails 4.1
2 创建一个数据迁移
2.1 Creating a Standalone Migration 创建一个单独的数据迁移
migrations 被保存为文件,位于在 db/migrate 目录里,一个文件对应于一个migration class。文件名的格式是 YYYYMMDDHHMMSS_create_products.rb,那是一个 UTC 时间戳用来区分migration,遵循的规则就是用下划线来间隔migration的命名。migration class 的命名(骆驼命名法)应该是文件名的最后一部分。例如 20080906120000_cr ...
version: rails 4.1
数据迁移(migration)是 Active Record 的一个特性,可以允许你更新你的数据库模式而无关乎时间性。比起用纯SQL语句写模式修改,数据迁移(migration)允许你用简单的 Ruby DSL 来描述你数据表的变更。
阅读完这份教程,你将会了解到:
你可以创建生成器(generator)。
Active Record 提供了一些方法用来操作你的数据库。
Rake 任务可以操作数据迁移(migration)和你的数据库模式(schema)。
migration如何来关联到schema.rb。
1 数据迁移概要
...