如何更新数据库架构而不丢失原始数据

时间:2013-10-05 20:44:59

标签: ruby-on-rails

大家好我想知道,如果您尝试回滚迁移只是为了更新架构,是否有办法不丢失数据?例如,在运行rake db:migrate之后,并且在插入几轮数据之后,您希望向架构添加新属性。

所以我的问题是如何添加新属性而不会丢失我以前的记录?有可能这样做吗?因为所有这一切,我只是通过运行rake db:rollback STEP = ...并丢失了我生成的所有数据。只是想知道。

感谢您的帮助 从: BC2

2 个答案:

答案 0 :(得分:3)

如果您有一个现有的表并希望在现有表中添加新属性,那么只需单独写入迁移即可 例如:你有一个带有属性名称的学生表,roll_no ...现在你想在学生表中添加'地址'属性

$ rails generate migration AddAddressToStudents address:string

将生成

    class AddAddressToStudents < ActiveRecord::Migration
      def change
        add_column :students, :address, :string
      end
    end

然后只需运行“rake db:migrate”

答案 1 :(得分:2)

您无需回滚即可更新架构。只需编写新的迁移即可更新现有表。

例如,要在不破坏任何内容的情况下向用户表中添加字段,请编写如下的迁移:

class AddFieldsToUser < ActiveRecord::Migration
  def change
    change_table :users do |t|
      t.date :birthday         # add new field
      t.remove :first          # remove a field
      t.rename :gender, :sex   # rename a field      

    end

  end
end

有关详细信息,请参阅此处:http://guides.rubyonrails.org/migrations.html#changing-tables