您好我遇到了铁路迁移问题:
当我像这样进行迁移时:
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
答案 0 :(得分:1)
执行db:drop
时,您正在删除自己的数据库。
因此,当您这样做时,数据将被删除。该数据不会进入重新插入的临时位置。如果您想在db:drop
之前/之后保留数据库中的数据,您需要将其存储在某处并自行重新插入。
当您仅更改结构时,除非您有特定原因要删除已存在的数据,否则您需要做的只是db:migrate
。
或者,您可以使用populator之类的内容,以便在迁移后清空/填充数据库中的测试数据。