ruby创建迁移

ruby在创建数据库前要创建迁移。下面就是创建迁移的方法。

迁移文件存储在 db/migrate 文件夹中,每个迁移保存在一个文件中。文件名采用 YYYYMMDDHHMMSS_create_products.rb 形式,即一个 UTC 时间戳后加以下划线分隔的迁移名。迁移的类名(驼峰式)要和文件名时间戳后面的部分匹配。例如,在 20080906120000_create_products.rb 文件中要定义 CreateProducts 类;在 20080906120001_add_details_to_products.rb 文件中要定义 AddDetailsToProducts 类。文件名中的时间戳决定要运行哪个迁移,以及按照什么顺序运行。从其他程序中复制迁移,或者自己生成迁移时,要注意运行的顺序。

自己计算时间戳不是件简单的事,所以 Active Record 提供了一个生成器:

$ rails generate migration AddPartNumberToProducts

 

这个命令生成一个空的迁移,但名字已经起好了:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
  end
end

 如果迁移的名字是“AddXXXToYYY”或者“RemoveXXXFromYYY”这种格式,而且后面跟着一个字段名和类型列表,那么迁移中会生成合适的 add_column  remove_column 语句。

 

 

 

$ rails generate migration AddPartNumberToProducts part_number:string

 

这个命令生成的迁移如下:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
  end
end

 如果想为新建的字段创建添加索引,可以这么做:

 

 

 

$ rails generate migration AddPartNumberToProducts part_number:string:index

 

这个命令生成的迁移如下:

class AddPartNumberToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_index :products, :part_number
  end
end

 类似地,还可以生成删除字段的迁移:

 

 

 

$ rails generate migration RemovePartNumberFromProducts part_number:string

 这个命令生成的迁移如下:

class RemovePartNumberFromProducts < ActiveRecord::Migration
  def change
    remove_column :products, :part_number, :string
  end
end

 迁移生成器不单只能创建一个字段,例如:

 

 

 

$ rails generate migration AddDetailsToProducts part_number:string price:decimal

生成的迁移如下:

class AddDetailsToProducts < ActiveRecord::Migration
  def change
    add_column :products, :part_number, :string
    add_column :products, :price, :decimal
  end
end

 如果迁移名是“CreateXXX”形式,后面跟着一串字段名和类型声明,迁移就会创建名为“XXX”的表,以及相应的字段。例如:

 

 

 

$ rails generate migration CreateProducts name:string part_number:string

 

生成的迁移如下:

class CreateProducts < ActiveRecord::Migration
  def change
    create_table :products do |t|
      t.string :name
      t.string :part_number
    end
  end
end

 

生成器生成的只是一些基础代码,你可以根据需要修改 db/migrate/YYYYMMDDHHMMSS_add_details_to_products.rb 文件,增删代码。

在生成器中还可把字段类型设为 references(还可使用 belongs_to)。例如:

 

$ rails generate migration AddUserRefToProducts user:references

 生成的迁移如下:

 

class AddUserRefToProducts < ActiveRecord::Migration
  def change
    add_reference :products, :user, index: true
  end
end

 

这个迁移会创建 user_id 字段,并建立索引。

如果迁移名中包含 JoinTable,生成器还会创建联合数据表:

 

$ rails g migration CreateJoinTableCustomerProduct customer product

 

 生成的迁移如下:

class CreateJoinTableCustomerProduct < ActiveRecord::Migration
  def change
    create_join_table :customers, :products do |t|
      # t.index [:customer_id, :product_id]
      # t.index [:product_id, :customer_id]
    end
  end
end

 

 

你可能感兴趣的:(ruby创建迁移)