美文网首页
数据迁徙

数据迁徙

作者: 风暴英雄 | 来源:发表于2014-03-31 20:09 被阅读0次
    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

    相关文章

      网友评论

          本文标题:数据迁徙

          本文链接:https://www.haomeiwen.com/subject/xuoktttx.html