`
jiajie0531
  • 浏览: 29401 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails Database Migrations 2 Creating a Migration 创建一个数据迁移

阅读更多

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

0
0
分享到:
评论

相关推荐

    mongoid_rails_migrations:Mongoid的数据迁移

    Mongoid的数据迁移。 宝石文件: gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:...

    mongoid_rails_migrations, Mongoid的数据迁移.zip

    mongoid_rails_migrations, Mongoid的数据迁移 发行说明最新版本,1.1. x, 目标 Mongoid&gt; = 4.0.0和 Rails&gt; = 4.2.0.对于 Rails&gt; = 3.2.0和 Mongoid&gt; = 3.0.0,使用版本 1.0.0.

    PHP Database Migrations-开源

    3. **创建迁移**:使用命令行生成新的迁移文件,通常包含一个升级(up)方法和一个降级(down)方法。 4. **运行迁移**:执行`migrate`命令,迁移工具会自动识别并应用未执行的迁移。 5. **回滚迁移**:若需回滚,...

    Ruby on Rails入门例子

    - **数据库迁移(Database Migrations)**:Rails使用迁移来管理数据库结构的变化。通过`rails generate migration AddTitleToPosts title:string`创建迁移,然后运行`rails db:migrate`执行迁移。 - **...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    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 ...

    Ruby+for+Rails

    `rails generate migration AddColumnToBooks column:type`会生成一个新的迁移文件,然后通过`rails db:migrate`执行迁移,更新数据库。 7. **路由(Routing)** Rails的路由系统将URL映射到控制器的动作上,定义...

    Rails3常用命令行命令

    Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...

    php-migration:像 PHP 中的迁移一样的 Rails

    迁移 sql 文件名必须包含时间戳和类似20150118140555_DatabaseStructure.sql的描述该脚本创建一个名为migrations的数据库表,并将已处理的迁移文件时间戳存储到此表中。 下次运行时,它不会运行基于migrations表的...

    ruby on rails 实例depot

    2. **创建新项目**:使用`rails new depot`命令创建一个新的Rails应用。这将生成一个包含所有基本目录和文件结构的新项目。 3. **数据库配置**:Rails默认使用SQLite数据库,但你可以通过修改`config/database.yml`...

    中文版rails教程

    使用`rails generate`命令可以快速创建模型、控制器、视图等文件,如`rails generate scaffold Post title:string content:text`会生成一个名为Post的资源,包含相关的数据库迁移文件、模型、控制器和视图。...

    rails 项目起步示例

    Rails是Ruby语言的一个著名Web开发框架,全称为Ruby on Rails,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码可读性。本示例"rails项目起步示例"是一个购物系统,非常适合初学者入门学习。 ...

    nova-rails-migrations:提供命令以轻松访问Rails项目中的迁移

    特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova中。用法要快速打开最新的迁移,请执行以下操作: 打开命令面板Cmd...

    Ruby on Rails中文指南

    13. **数据库迁移(Database Migrations)**:迁移允许开发者以版本控制的方式管理数据库结构的变化。 14. **AJAX和Unobtrusive JavaScript (UJS)**:Rails支持无侵入式JavaScript,通过数据属性和事件监听,使页面...

    ruby on rails轻松使用

    14. **数据库迁移(Database Migrations)**: 当数据库结构需要变化时,使用`rails generate migration`创建迁移文件,然后通过`rails db:migrate`来执行迁移。 15. **Rails Console**: 交互式的命令行工具,可以...

    浅谈Ruby on Rails下的rake与数据库数据迁移操作

    总结来说,Rails的Migration和rake工具在数据库管理和数据迁移中各自扮演着不同的角色。Migration应专注于数据库Schema的演变,而rake任务则更适合处理复杂的数据操作。遵循最佳实践,编写清晰、高效的rake任务,...

    web开发之rails最新调试通过购物车代码

    6. **数据库迁移(Database Migrations)**:Rails提供了方便的工具来创建和更新数据库结构。购物车功能可能涉及到创建新的表,如`cart_items`和`orders`。 7. **测试(Testing)**:为了确保代码的健壮性和正确性...

    rails配置sqlserver2000

    为了确保一切正常,你可以尝试创建一个数据库迁移并运行它,这将测试你的连接是否有效。创建一个新的迁移文件,如: ```bash rails g migration CreateTableName ``` 在生成的迁移文件中编写你的SQLServer 2000...

    rails指南 中文版

    Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,强调“约定优于配置”(Conventions over Configuration)和“Don't Repeat Yourself”(DRY,不要...

Global site tag (gtag.js) - Google Analytics