rename_column删除列的所有内容

时间:2011-12-16 17:45:04

标签: ruby-on-rails database ruby-on-rails-3 migration

您好我遇到了铁路迁移问题:

当我像这样进行迁移时:

class RenameColumn < ActiveRecord::Migration
  def change
    rename_column :users, :hotel_stars, :rating_stars
    rename_column :users, :restaurant_stars, :price_stars
  end
end

并做一个rake db:迁移它工作正常。列被重命名,那些列的数据就在那里。但是,当我然后执行rake db:drop,创建,迁移列重命名并且这些列的数据都消失了...(我的一个迁移文件填充了数据库,并且它们在重命名之前也填充了这两列)

这里有什么问题?

另一个问题:我知道更改以前的迁移文件不是一个好主意,但是当我运行rake db:drop db:create和db:migrate之后是否正常 - 或者会导致问题吗?

我的迁移文件的顺序如下:

add_devise_to_users - &gt;创建表用户

add_columns_to_default_user - &gt;添加列并更新整个表

class AddColumnsToDefaultUser < ActiveRecord::Migration
  def change
    add_column :users, :name, :string
    add_column :users, :dob, :date
    add_column :users, :address, :string
    add_column :users, :hotel_stars, :integer
    add_column :users, :restaurant_stars, :integer
    add_column :users, :profile_picture_url, :string
    add_column :users, :selected_car, :integer

    User.reset_column_information

    User.find(1).update_attributes!( :name => 'Alexander MacDonald', :dob => '1984-08-20', :address => '900 Highschool Way, Mountain View, CA 94041', :hotel_stars => '3', :restaurant_stars => '2', :profile_picture_url => 'user1.png', :selected_car => 1)

  end
end

然后rename_column

class RenameColumn < ActiveRecord::Migration
  def change
    rename_column :users, :hotel_stars, :rating_stars
    rename_column :users, :restaurant_stars, :price_stars
  end
end

1 个答案:

答案 0 :(得分:1)

执行db:drop时,您正在删除自己的数据库。

因此,当您这样做时,数据将被删除。该数据不会进入重新插入的临时位置。如果您想在db:drop之前/之后保留数据库中的数据,您需要将其存储在某处并自行重新插入。

当您仅更改结构时,除非您有特定原因要删除已存在的数据,否则您需要做的只是db:migrate

或者,您可以使用populator之类的内容,以便在迁移后清空/填充数据库中的测试数据。