玩玩rails中的迁移

一、迁移是啥?

当我们使用rake db:migrate时,就是在使用迁移了
迁移是ActiveRecord的一个特性,允许我们按照时间顺序管理数据库模式。

二、迁移有啥用?

有了迁移,我们不必再用纯SQL来修改数据库模式,而是可以使用简单的Ruby DSL来描述对数据库表的修改。

三、怎么用?
一开始数据库模式并不包含任何内容,之后通过一个个迁移来添加或删除数据库表、字段和记录。

1、创建独立的迁移
比如:

class CreateProducts < ActiveRecord::Migration[5.0]
      def change
        create_table :products do |t|
          t.string :name
          t.text :description

          t.timestamps
        end
      end 
end

这个迁移字段用于添加数据库表、数据库表中包含name、description字段,同时隐藏添加了id主键字段,这是所有Active Record模型的默认主键。

timestampes宏添加了created_at和updated_at两个字段。这三个字段都是Active Record自动管理。

这也解释了为什么我们没有添加id字段,而会自动出现在数据库中了。

迁移文件存储在db/migrate文件夹中,一个迁移文件包含一个迁移类,文件名采用YYYYMMDDHHMMSS_create_products.rb,文件的名称应该对应迁移类的名称(驼峰式)。

如果想增加字段可以使用下面这个命令:

rails generate migration AddPartNumberToProducts

references字段,用法:

rails generate migration AddUserRefToProducts user:references

这行命令可以生成

class AddUserRefToProducts < ActiveRecord::Migration[5.0]
    def
        add_reference :product, :user, index: true, foreign_key: true 
    end
end

2、使用changes方法

changes方法是目前最常用的,在大多数情况下,Active Record知道如何自动撤销用change方法编写的迁移,目前只能使用下列方法:

add_column
add_foreign_key
add_index
add_reference
add_timestampes
change_column_default
change_column_null
create_join_table
create_table
disable_extension
drop_join_table
drop_table(必须提供块)
enable_extension
remove_column(必须提供字段类型)
remove_foreign_key(必须提供第二个数据表) ▪ remove_index
remove_reference
remove_timestamps
rename_column
rename_index
rename_table

如果不使用change、change_default和remove方法,那么change_table方法也是可以撤销的

你可能感兴趣的:(玩玩rails中的迁移)