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_create_products.rb 应该定义的是类 CreateProducts,20080906120001_add_details_to_products.rb 应该定义的时 AddDetailsToProducts。Rails用这个时间戳来决定哪个migration应该被运行和什么顺序,因此如果你从另外一个应用中拷贝一个 migration,或者你自己生成一个文件,要注意的它的在顺序中的位置。
当然,计算时间戳是没有乐趣的,因此 Active Record 提供了一个生成器来为你处理它:
$ bin/rails generate migration AddPartNumberToProducts |
这会产生一个空的,但有符合规则命名的 migration :
classAddPartNumberToProducts < ActiveRecord::Migration defchange end end |
如果 migration 名称是“AddXXXToYYY”或者“RemoveXXXFromYYY”的格式,紧接在后面的是一系列的列名和类型,然后一个 migration 包含了合适的 add_column 和 remove_column 语句将会被创建。
$ bin/rails generate migration AddPartNumberToProducts part_number:string |
将会创建
classAddPartNumberToProducts < ActiveRecord::Migration defchange add_column :products, :part_number, :string end end |
如果你想要对于一个新的数据列上增加一个索引,你能够这样来实现:
$ bin/rails generate migration AddPartNumberToProducts part_number:string:index |
将会创建
classAddPartNumberToProducts < ActiveRecord::Migration defchange add_column :products, :part_number, :string add_index :products, :part_number end end |
类似的,你可以生成一个 migration 从命令行来移除一个数据列:
$ bin/rails generate migration RemovePartNumberFromProducts part_number:string |
生成
classRemovePartNumberFromProducts < ActiveRecord::Migration defchange remove_column :products, :part_number, :string end end |
你是不受限制地来魔术般的生成数据列。例如:
$ bin/rails generate migration AddDetailsToProducts part_number:string price:decimal |
生成
classAddDetailsToProducts < ActiveRecord::Migration defchange add_column :products, :part_number, :string add_column :products, :price, :decimal end end |
如果 migration 名称是“CreateXXX”的格式,后面接下来的是一系列的数据列名和类型,然后一个 migration 创建数据表 XXX 和其罗列的数据列将会被生成。例如:
$ bin/rails generate migration CreateProducts name:string part_number:string |
生成
classCreateProducts < ActiveRecord::Migration defchange create_table :productsdo|t| t.string :name t.string :part_number end end end |
正如平常,在开始阶段就已经为你生成好了。正如你所看到的,你能够在其中增加或者删除,通过编辑 db/migrate/YYYYMMDDHHMMSS_add_details_to_products.rb 文件。
同样的,生成器会接受数据列类型作为引用(同样也适用于 belongs_to)。例如:
$ bin/rails generate migration AddUserRefToProducts user:references |
生成
classAddUserRefToProducts < ActiveRecord::Migration defchange add_reference :products, :user, index: true end end |
这个 migration 将会创建一个 user_id 数据列作为一个索引。
如果JoinTable 是名称的一部分,那么生成器也会产生关联数据表:
$ bin/rails g migration CreateJoinTableCustomerProduct customer product |
将会产生接下来的 migration:
classCreateJoinTableCustomerProduct < ActiveRecord::Migration defchange create_join_table :customers, :productsdo|t| # t.index [:customer_id, :product_id] # t.index [:product_id, :customer_id] end end end |
2.2 Model Generators 模型生成器
模型和 scaffold 生成器将会创建 migrations,其恰当地增加一个新的数据列。这个 migration 为了创建关联的数据表,将会包含其命令。如果你告诉Rails,你想要什么数据列,那么为了增加这些列的语句同样也会被创建。例如,运行:
$ bin/rails generate model Product name:string description:text |
将会创建一个类似于下面的 migration:
classCreateProducts < ActiveRecord::Migration defchange create_table :productsdo|t| t.string :name t.text :description
t.timestamps end end end |
你能够增加任何你想要的数据列名或者类型。
2.3 Supported Type Modifiers 支持类型修改
你同样能够详细声明一些属性,就在花括号中的字段类型之后。你可以做下面的一些修改:
- 限制设置 string/text/binary/integer 字段的最大长度。
- 对于 decimal 字段的精确性做定义,表示该数字总共多少位。
- 对于 decimal 字段的小数位做定义,表示该数字在小数点后的位数。
- 多态,为了关联 belongs_to 增加一个类型的数据列。
- null,允许或者不允许 NULL 存在于数据列中。
例如,运行:
$ bin/rails generate migration AddDetailsToProducts 'price:decimal{5,2}' supplier:references{polymorphic} |
将会产生一个类似于这样的 migration:
classAddDetailsToProducts < ActiveRecord::Migration defchange add_column :products, :price, :decimal, precision: 5, scale: 2 add_reference :products, :supplier, polymorphic: true, index: true end end |
original url:http://guides.rubyonrails.org/migrations.html#creating-a-migration
相关推荐
Mongoid的数据迁移。 宝石文件: gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:...
mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid> = 4.0.0和 Rails> = 4.2.0.对于 Rails> = 3.2.0和 Mongoid> = 3.0.0,使用版本 1.0.0.
3. **创建迁移**:使用命令行生成新的迁移文件,通常包含一个升级(up)方法和一个降级(down)方法。 4. **运行迁移**:执行`migrate`命令,迁移工具会自动识别并应用未执行的迁移。 5. **回滚迁移**:若需回滚,...
- **数据库迁移(Database Migrations)**:Rails使用迁移来管理数据库结构的变化。通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **...
See how creating an advanced Postgres index for a case-insensitive search speeds up your back end - enabling you to create a dynamic user experience using Angular 2. Create reusable components that ...
`rails generate migration AddColumnToBooks column:type`会生成一个新的迁移文件,然后通过`rails db:migrate`执行迁移,更新数据库。 7. **路由(Routing)** Rails的路由系统将URL映射到控制器的动作上,定义...
Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...
迁移 sql 文件名必须包含时间戳和类似20150118140555_DatabaseStructure.sql的描述该脚本创建一个名为migrations的数据库表,并将已处理的迁移文件时间戳存储到此表中。 下次运行时,它不会运行基于migrations表的...
2. **创建新项目**:使用`rails new depot`命令创建一个新的Rails应用。这将生成一个包含所有基本目录和文件结构的新项目。 3. **数据库配置**:Rails默认使用SQLite数据库,但你可以通过修改`config/database.yml`...
使用`rails generate`命令可以快速创建模型、控制器、视图等文件,如`rails generate scaffold Post title:string content:text`会生成一个名为Post的资源,包含相关的数据库迁移文件、模型、控制器和视图。...
Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...
特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova中。用法要快速打开最新的迁移,请执行以下操作: 打开命令面板Cmd...
13. **数据库迁移(Database Migrations)**:迁移允许开发者以版本控制的方式管理数据库结构的变化。 14. **AJAX和Unobtrusive JavaScript (UJS)**:Rails支持无侵入式JavaScript,通过数据属性和事件监听,使页面...
14. **数据库迁移(Database Migrations)**: 当数据库结构需要变化时,使用`rails generate migration`创建迁移文件,然后通过`rails db:migrate`来执行迁移。 15. **Rails Console**: 交互式的命令行工具,可以...
总结来说,Rails的Migration和rake工具在数据库管理和数据迁移中各自扮演着不同的角色。Migration应专注于数据库Schema的演变,而rake任务则更适合处理复杂的数据操作。遵循最佳实践,编写清晰、高效的rake任务,...
6. **数据库迁移(Database Migrations)**:Rails提供了方便的工具来创建和更新数据库结构。购物车功能可能涉及到创建新的表,如`cart_items`和`orders`。 7. **测试(Testing)**:为了确保代码的健壮性和正确性...
为了确保一切正常,你可以尝试创建一个数据库迁移并运行它,这将测试你的连接是否有效。创建一个新的迁移文件,如: ```bash rails g migration CreateTableName ``` 在生成的迁移文件中编写你的SQLServer 2000...
Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...