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
|
相关推荐
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.
Mongoid的数据迁移。 宝石文件: gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:...
Rails中的Migration相对来说更适合做数据库的对象集合操作,而自动化的rake则是一个较好的选择,下面来浅谈Ruby on Rails下的rake与数据库数据迁移操作,需要的朋友可以参考下
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迁移的另一...
迁移 sql 文件名必须包含时间戳和类似20150118140555_DatabaseStructure.sql的描述该脚本创建一个名为migrations的数据库表,并将已处理的迁移文件时间戳存储到此表中。 下次运行时,它不会运行基于migrations表的...
适用于Nova的Rails迁移扩展提供命令以轻松访问Rails项目中的迁移。特征快速打开最新的Rails迁移从您的迁移列表中选择一个特定的迁移安装下载最新。 解压缩档案。 双击RailsMigrations.novaextension将扩展安装在Nova...
NULL 博文链接:https://thinking80s.iteye.com/blog/424942
“PHP 数据库迁移”使您能够拥有不同版本的数据库模式。 每个迁移文件都会改变架构,这个概念来自 Ruby on Rails。 可以在所有数据库服务器上执行迁移,确保一致性和可靠性。
要运行迁移,请单击“ Run Rails Migration $ bundle exec rake db:migrate 已知的问题 没有任何 发行说明 1.0.0 最初发布的rails-auto-migrate 1.0.2 修复自动迁移 想要查询更多的信息 享受!
该gem防止Rails在运行迁移时自动加载应用程序代码,从而避免了从迁移代码引用ActiveRecord模型的常见错误。 用法 将good_migrations添加到您的gemfile中: gem 'good_migrations' 大功告成! 就是这样。 背景 在...
jquery-datatables-rails, 用于 Rails的jquery数据表 gem jquery-datatables-rails 这个 gem 为 jQuery DataTables插件提供了方便,以便与 Rails 资产pipleine结合使用。 它提供所有基本的datatable文件,以及一些...
RailsAsyncMigrations ActiveRecord::Migration扩展程序以一种简单直接的方式使您的迁移异步。动机创建该库的目的是为了帮助在技术水平上难以扩展的小型公司。 小型项目不需要异步迁移队列,大公司在遇到扩展问题时...
允许您在非Rails项目中使用ActiveRecord迁移。 安装 将此行添加到应用程序的Gemfile中(如果没有,请运行bundle init ): gem 'active_record_migrations' gem 'sqlite3' # or 'pg', 'mysql2', ... 然后执行: ...
有时,Rails迁移不仅会更改数据库架构,还会更改数据。 而且该代码更改数据可能已过时且失败。 有一些技术可以帮助避免这些陷阱。 例如,在迁移中定义模型类或编写原始SQL。 但是它们不能在所有情况下提供帮助,也...
migrate 创建迁移时,它应继承自ActiveRecord::Migration[5.2]自定义迁移路径该Rake文件希望你在你的迁移db/migrat4 ,但如果你想在不同的位置,编辑: #... snipActiveRecord::Migrator.migrate("lib/db/migrations...
gem 'strong_migrations' 并运行: bundle installrails generate strong_migrations:install “强迁移”为迁移设置了较长的语句超时,因此您可以为应用程序设置。怎么运行的当您运行有潜在危险的迁移时,您会看到...
Migration Builder是一个交互式的命令行工具,用于构建Rails迁移。 目标是使Migration Builder能够生成95%的常见迁移类型,而无需使用Rails迁移语法。 注意:Migration Builder目前处于开发的极端阶段,因此请相应...
目前,持久性框架使用两种方法中的一种:映射或包装 。要有效地管理涉及持久性域模型的应用程序变化,必须协调数据、模式和模型...这篇文章研究的Rails模式迁移是一种把每个数据库的模式变化与基本对象模型分离的思想。
非Rails(和非Ruby)项目中的Rails迁移。 什么是新的 在6.x版本中,由于增加了对Rails 6迁移的支持。 在5.x版本中,我们转向使用Rails 5迁移,而不是维护我们自己的迁移相关代码。 使用Rails 5迁移几乎可以做的任何...