在迁移中混合了新的列名和类型,现在模式中的表已损坏

时间:2012-01-22 12:48:55

标签: ruby-on-rails-3 migration

我使用迁移

为模型添加了多个列
class AddManyfieldsToBooks < ActiveRecord::Migration
  def self.up
    add_column :books, :item_one, :float
    add_column :books, :item_two, :float

  end

  def self.down
    remove_column :books, :item_one
    remove_column :books, :item_two    
  end
end

我还更新了Book模型中的attr_accessible

attr_accessible :item_one, :item_two

然后我运行了bundle exec rake db:migrate命令

但是,新字段尚未添加到schema.rb

自从我上次使用rails以来已经有一段时间了,并且想知道我哪里出错了。我以前一次为这个项目运行一个字段的迁移,它们一直很好。有什么我想念的吗?

由于

编辑1:我已经意识到我做迁移时写的是

rails migration add_manyfields_to_books float:item_one

而不是

rails migration add_manyfields_to_books item_one:float

这导致schema.rb

中出现以下错误
# Could not dump table "books" because of following StandardError
#   Unknown type 'item_one' for column 'float'

我创建了一个新的分支'adding-items'来改变数据库。但是,即使我返回到主分支,模式中也存在相同的错误。我试过回滚迁移

bundle exec rake db:rollback STEP=1

但这并不能解决问题。我还删除了我正在进行这些更改的添加项目分支,希望它们不会出现在主文件中

解决此问题的最佳方法是什么?我应该删除Books表并从头开始重新添加吗?

1 个答案:

答案 0 :(得分:1)

我通过删除整个Books表并使用包含我想要的额外字段的新迁移重新添加它来解决这个问题。