rails数据库迁移问题

时间:2014-04-19 13:27:11

标签: ruby-on-rails ruby

好的,所以你已经构建了你的模型'rails generate model test(inputs)'你已经rake db:migrate检查你的模式文件看起来都很好并正在工作并写入sqlite。但是你意识到你需要DB中的另一个属性。一种方法是rake db:rollback,在迁移文件中进行更改,rake db:migrate再次迁移,并且hey presto看起来都很好。但是做rake db:rollback已经丢失了我已经存储在sqlite中的所有数据。所以我猜这不是正确的方法吗?什么是最好的方法?

class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
  t.text :title
  t.text :requester
  t.text :requester_email
  t.text :customer
  t.text :contact
  t.text :customer_email
  t.text :customer_phone
  t.string :type_of_change

3 个答案:

答案 0 :(得分:1)

您可以使用rails g migration <migration_name>(例如rails g migration add_foo_to_blah)生成新迁移,然后在新迁移中进行所需的更改。

例如。您可以添加新列,重命名列等。

有关详细信息:http://guides.rubyonrails.org/migrations.html#creating-a-standalone-migration

答案 1 :(得分:0)

是的,db:rollback会收回上次迁移,因此如果在上次迁移中添加了一些列,db:rollback将删除它们(如果您更改迁移并再次运行,则这些字段将为添加了,但数据已经丢失了。)

添加更多字段的正确方法是生成新的迁移并在那里添加这些字段。

答案 2 :(得分:0)

事实上db:rollback是最好的方法。当然,当您执行db:rollback时,它会清除您现有的数据,但您需要db:migrate才能让数据再次显示在表格中。

如果您不想rake db:rollback,请创建另一个migration file,以便为您完成工作。

修改

您需要执行以下命令才能在posts表中添加该列。

rails g migration AddImplementerToPosts implementer:text

并执行rake db:migrate以确保在表格中添加了该列。