1

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

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

感谢您的帮助来自:BC2

4

2 回答 2

4

如果您有一个现有表并想在现有表中添加新属性,那么简单的写入独立迁移。
例如:您有一个属性名称为roll_no 的学生表...现在您想在学生表中添加“地址”属性

$ rails generate migration AddAddressToStudents address:string

会产生

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

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

于 2013-10-05T23:04:59.797 回答
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#chang-tables

于 2013-10-05T20:50:54.360 回答