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.
迁移 sql 文件名必须包含时间戳和类似20150118140555_DatabaseStructure.sql的描述该脚本创建一个名为migrations的数据库表,并将已处理的迁移文件时间戳存储到此表中。 下次运行时,它不会运行基于migrations表的...
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迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova中。用法要快速打开最新的迁移,请执行以下操作: 打开命令面板Cmd...
“PHP 数据库迁移”使您能够拥有不同版本的数据库模式。 每个迁移文件都会改变架构,这个概念来自 Ruby on Rails。 可以在所有数据库服务器上执行迁移,确保一致性和可靠性。
8 Setting up a Todo application in Rails 8 Analyzing folder structure of a Rails application 10 Creating views 12 Styling views using CSS 14 Redesigning the Todo application 16 Challenges in styling ...
Migration Builder是一个交互式的命令行工具,用于构建Rails迁移。 目标是使Migration Builder能够生成95%的常见迁移类型,而无需使用Rails迁移语法。 注意:Migration Builder目前处于开发的极端阶段,因此请相应...
Rails 5.1 v3.0.1(2019年6月1日发布) Rails 5.2 v4.0.2(2019年6月2日发布) Rails 6.0 v5.0.2(于2019年12月10日发布)介绍非模式迁移(也称为数据迁移)是Rails迁移的另一种类型。 数据迁移的运行方式与模式迁移...
RailsAsyncMigrations ActiveRecord::Migration扩展程序以一种简单直接的方式使您的迁移异步。动机创建该库的目的是为了帮助在技术水平上难以扩展的小型公司。 小型项目不需要异步迁移队列,大公司在遇到扩展问题时...
rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...
创建一个Rakefile: require 'active_record_migrations' ActiveRecordMigrations.load_tasks 用法 默认情况下,将从db/config.yml读取数据库配置,并且将在db/migrate下创建迁移文件。 如果要保留默认值,请创建...
Chapter 2 Creating a Component-Based Application Chapter 3 Tooling for Components Chapter 4 Component Refactorings:Extracting Components out of Components Chapter 5 From Ball of Mud to First ...
Rails中的Migration相对来说更适合做数据库的对象集合操作,而自动化的rake则是一个较好的选择,下面来浅谈Ruby on Rails下的rake与数据库数据迁移操作,需要的朋友可以参考下
迁移数据 该gem提供了在迁移中安全地编写任何代码的功能,而不会导致... 简而言之,此gem提倡编写用于数据迁移的测试,并提供一种允许编写以单独方法迁移数据的代码的方法。 就是这样,让代码分别迁移数据并进行适当
RailsAdmin - 一个Rails引擎,提供了一个易于使用的界面来管理您的数据
目前,持久性框架使用两种方法中的一种:映射或包装 。要有效地管理涉及持久性域模型的应用程序变化,必须协调数据、模式和模型...这篇文章研究的Rails模式迁移是一种把每个数据库的模式变化与基本对象模型分离的思想。
migrate 创建迁移时,它应继承自ActiveRecord::Migration[5.2]自定义迁移路径该Rake文件希望你在你的迁移db/migrat4 ,但如果你想在不同的位置,编辑: #... snipActiveRecord::Migrator.migrate("lib/db/migrations...
good_migrations 警告:good_migrations当前不适用于zeitwerk,这是... 相反,您应该编写一个新的迁移来执行所需的更改。 这意味着,如果您的迁移引用了您在app/models定义的ActiveRecord模型对象,则旧的迁移可能
rails2-sample good book