migrate快速学习

migrate用于进行数据库操作,rails中使用migrate的时候会在数据中建立一个schema_migrations表,用以记录migrate运行的记录,每当运行migrate的时候,会首先去检查这张表,看当前migrate 文件的时间戳是否在这张表,如果存在就不会执行这个migrate,所以如果不小心修改migrate文件的时间戳部分的内容,会导致该migrate文件再次执行一遍,从而报错

回滚方式:

1,直接书写

def change

..

end

rails自身识别,进行回滚

2.reversible do |dir|

dir.up{}

dir.down{}

end

3.单独的up down方法

def up

end

def down

end


脚手架创建迁移文件

rails g migration xxx,默认会生成change方法

支持自动生成代码的类型

1.迁移名为addxxx

后跟字段会生成表字段

2.迁移名removexxxfromxxx

会生成移除字段代码

3.迁移名createJoinTableXxxYyy

创建联合数据表(中间表)Xxx Yyy

4.迁移名为AddXxxToYyy,并且后面跟上关联的模型如

rails g migration AddUserToArticles user:references

会识别出是给user article建立关联,添加关联模型

5.在字段类型后面跟{}并添加选项,可以修饰字段

如,添加多态关联

rails g migration AddUserRefToArticles user:references{polymorphic}

这样生成的migrate文件如下

class AddUserRefToArticles < ActiveRecord::Migration

  def change

    add_reference :articles, :user, polymorphic: true, index: true

  end

end

6.create_table方法,用于创建数据表并添加表中字段

create_table :articles do |t| 

t.string name 

end

7.change_table用于修改数据表,可以提供比create_table更多的用法

change_table :articles do |t|

t.text :name

表示增加字段 

t.remove :name

移除字段

t.rename :name.:title

 重命名字段 

t.index

给字段添加索引

8.回滚

rake db:rollback用于回滚

可用选项

STEP=x,回滚几次迁移(注意一次迁移指的是一个migrate文件)


rake db:migrate:redo STEP=1

回滚之后重做一次迁移


执行或者回滚指定迁移

rake db:migrate:up VERSION=20170717123350

rake db:migrate:down VERSION=20170717123350
就算migrate文件中没有up down方法也可以运行


9.建议

有时编写的迁移中可能有错误,如果已经运行了迁移,不能直接编辑迁移文件再运行迁移。Rails 认为这个迁移已经运行,所以执行 rake db:migrate 任务时什么也不会做。这种情况必须先回滚迁移(例如,执行 rake db:rollback 任务),编辑迁移文件后再执行 rake db:migrate 任务执行改正后的版本。

一般来说,直接修改现有的迁移不是个好主意。这么做会为你以及你的同事带来额外的工作量,如果这个迁移已经在生产服务器上运行过,还可能带来不必要的麻烦。你应该编写一个新的迁移,做所需的改动。编辑新生成还未纳入版本控制的迁移(或者更宽泛地说,还没有出现在开发设备之外),相对来说是安全的。


你可能感兴趣的:(RoR)