数据迁徙

1 剖析迁移任务的构造
class CreateProducts < ActiveRecord::Migration
  def up
    create_table :products do |t|
      t.string :name
      t.text :description
 
      t.timestamps
    end
  end
 
  def down
    drop_table :products
  end
end

这个迁移任务建立了一张叫 products 的数据库表,这张表中包含一个名为 name 的 string 类型字段和一个名为 description 的 text 类型字段。与此同时,一个名为 id 的字段也会被添加,这个字段是默认添加,我们不需要另外请求。
另外 Active Record 所需要的时间戳( timestamp )字段( created_at 和 updated_at )也会被自动添加。而要取消这个任务只需简单地把这张表删除掉即可。

2.1 创建Migration
$ rails generate migration AddPartNumberToProducts

使用标准的"AddXXXToYYY" 或者"RemoveXXXFromYYY"生成时

 $ rails generate migration AddPartNumberToProducts part_number:string

会生成如下结果

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

我们也可以使用migration来删除

 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 和一些列定义,会自动代码如下所示

 $ 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

在多对多关系型表单时,我们可以使用下面的代码生成中间表

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
2.2 模型生成
rails generate model Product name:string description:text
2.3 类型修改
  • limit Sets the maximum size of the string/text/binary/integer fields
  • precision Defines the precision for the decimal fields
  • scale Defines the scale for the decimal fields
  • polymorphic Adds a type column for belongs_to associations
  • null Allows or disallows NULL values in the column.

3 自己动手写一个Migration

你可能感兴趣的:(数据迁徙)