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

Rails Database Migrations 1 Migration Overview 数据迁移概要

阅读更多

version: rails 4.1

数据迁移(migration)是 Active Record 的一个特性,可以允许你更新你的数据库模式而无关乎时间性。比起用纯SQL语句写模式修改,数据迁移(migration)允许你用简单的 Ruby DSL 来描述你数据表的变更。

 

阅读完这份教程,你将会了解到:

  • 你可以创建生成器(generator)。
  • Active Record 提供了一些方法用来操作你的数据库。
  • Rake 任务可以操作数据迁移(migration)和你的数据库模式(schema)。
  • migration如何来关联到schema.rb。

 

1 数据迁移概要

 

Migrations 是一个简单的方式,用一种始终如一和简单的方式来修改你的数据库模式而无关乎时间性。他们使用 Ruby DSL,以致于你不需要手工地写SQL,让你的数据库模式和数据库的修改不耦合。

 

你可以把每一个 migration 都看做是数据库的一个新的“版本”。一个数据库模式一开始是没有任何东西的,每一个migration修改它,用来增加或删除数据表,数据列或者全部。Active Record 知道如何随着时间线来修改你的模式,在历史版本到最新的版本中找出它当时的版本。Active Record 同样也会更新你的 db/schema.rb 文件,用来匹配你数据库的最新结构。

 

这里是一个 migration 的例子:

classCreateProducts < ActiveRecord::Migration

  defchange

    create_table :productsdo|t|

      t.string :name

      t.text :description

 

      t.timestamps

    end

  end

end

这个 migration 增加了一个数据表叫做 products,其有一 string 列叫做 name,一 text 列叫做 description。一个主键列叫做 id,它会隐式地增加,它是所有 Active Record models 默认的主键。这个时间戳的宏增加了两列,created_at 和 updated_at。如果他们存在,那么这些列是由 Active Record 自动管理的。

注意到我们所定义的改变,正是我们想要接下来要学习的内容。在这个migration运行之前,是没有数据表的。在运行之后,这个数据表就会存在。Active Record 同样也知道如何去可逆这个 migration:如果我们回滚这个 migration,就会删除这个数据表。

对于支持事务性语句来改变数据模式的数据库,migration 是被整合到一个事务中的。如果数据库不支持这个,当一个 migration 失败时,它的部分执行成功,就是不会整个回滚。你将不得不通过手工的方式回滚剩余的变化。

p.s. 有些查询不会运行在一个事务中。如果你的适配器支持 DDL 事务,对于单个的 migration 你能够使用 disable_ddl_transaction! 来使他们失效。

如果你期待一个 migration 做的某些动作,而使得 Active Record 不知道如何去可逆,你可以使用 reversible:

classChangeProductsPrice < ActiveRecord::Migration

  defchange

    reversible do|dir|

      change_table :productsdo|t|

        dir.up   { t.change :price, :string}

        dir.down { t.change :price, :integer}

      end

    end

  end

end

或者,你可以使用 up 和 down 来替代这个变化:

classChangeProductsPrice < ActiveRecord::Migration

  defup

    change_table :productsdo|t|

      t.change :price, :string

    end

  end

 

  defdown

    change_table :productsdo|t|

      t.change :price, :integer

    end

  end

end

 

 

 

origianl: http://guides.rubyonrails.org/migrations.html

0
0
分享到:
评论

相关推荐

    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.

    mongoid_rails_migrations:Mongoid的数据迁移

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

    PHP Database Migrations-开源

    - **项目迭代**:在项目开发过程中,当需要增加新表、修改字段或删除无用数据时,使用迁移可以保证团队成员在不同阶段都能访问到正确的数据库状态。 - **多环境部署**:在开发、测试和生产环境之间切换时,迁移可以...

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

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

    nonschema_migrations:在Rails应用程序中将架构与数据迁移分开

    Rails 5.0 v2.0.1(2019年6月1日发布) 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迁移的另一...

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

    适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...

    Ruby on Rails入门例子

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

    rails-auto-migrate:用于Rails的VSCode扩展,可监视迁移文件夹中的新文件夹,打开最新的迁移文件并自动运行迁移

    要运行迁移,请单击“ Run Rails Migration $ bundle exec rake db:migrate 已知的问题 没有任何 发行说明 1.0.0 最初发布的rails-auto-migrate 1.0.2 修复自动迁移 想要查询更多的信息 享受!

    Ruby+for+Rails

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

    good-migrations:在运行数据库迁移时防止Rails自动加载应用程序代码

    该gem防止Rails在运行迁移时自动加载应用程序代码,从而避免了从迁移代码引用ActiveRecord模型的常见错误。 用法 将good_migrations添加到您的gemfile中: gem 'good_migrations' 大功告成! 就是这样。 背景 在...

    Ruby on Rails中文指南

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

    中文版rails教程

    2. **数据库迁移(Database Migrations)**:Rails使用ActiveRecord和SQLite、MySQL或PostgreSQL等数据库系统交互。开发者通过编写迁移文件来定义和修改数据库结构。 3. **路由(Routing)**:Rails的路由系统根据...

    ruby on rails轻松使用

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

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

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

    rails 项目起步示例

    - **Database Migration**:数据库结构的变化会通过迁移文件来实现,运行`rake db:migrate`进行更新。 - ** erb**:ERB(Embedded Ruby)是Rails中的视图模板语言,允许在HTML中嵌入Ruby代码。 - **Helper**:辅助...

    jquery-datatables-rails, 用于 Rails的jquery数据表 gem.zip

    jquery-datatables-rails, 用于 Rails的jquery数据表 gem jquery-datatables-rails 这个 gem 为 jQuery DataTables插件提供了方便,以便与 Rails 资产pipleine结合使用。 它提供所有基本的datatable文件,以及一些...

    ruby on rails 实例depot

    创建新模型后,使用`rails generate migration`创建迁移文件,定义数据库表的字段和结构,然后运行`rails db:migrate`执行迁移。 6. **控制器(Controllers)**:控制器处理HTTP请求并调用模型进行业务处理。比如,...

Global site tag (gtag.js) - Google Analytics