Rails:如何回滚拙劣的迁移

Mel*_*emi 14 ruby-on-rails rollback rails-migrations ruby-on-rails-3

我是个白痴......搞砸了Rails的迁移:

思考迁移将像模型生成器一样工作(使用references:modelname)我做了以下事情:

$ rails g migration add_event_to_photos references:event
Run Code Online (Sandbox Code Playgroud)

这创造了迁移

class AddEventToPhotos < ActiveRecord::Migration
  def change
    add_column :photos, :references, :event
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我的开发数据库(SQLite3)在表中有一个references类型eventphotos列.

我的schema.rb中间有一行说:

# Could not dump table "photos" because of following StandardError
#   Unknown type 'event' for column 'references'
Run Code Online (Sandbox Code Playgroud)

rake db:rollback 无能为力:

$ rake db:rollback
==  AddEventToPhotos: reverting ===============================================
-- remove_column("photos", :references)
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `to_sym' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

那么,如何在数据库中回滚并维护我的开发数据呢?如果那是我唯一的选择,我甚至会很高兴丢弃照片表.但是不想重建整个事情.该怎么办?


顺便说一句 - 对于任何读这篇文章的人都要犯同样的愚蠢错误......不要!使用正确的迁移生成器:

$ rails g migration add_event_to_photos event_id:integer
Run Code Online (Sandbox Code Playgroud)

Moh*_*mad 6

我发现这样做的最简单方法是在schema.rb文件中重新创建表/db/.然后我跑了一个rake db:reset(如果它说你有待定的迁移,只需删除它们并再试一次).

这解决了这个问题.


num*_*407 2

添加一个空的 down 方法并运行 rake db:rollback

编辑啊,这是新的迁移语法,您可以简单地将主体替换为:

def self.down; end
Run Code Online (Sandbox Code Playgroud)

这是旧的语法,或者可能完全删除主体(还没有尝试过)然后运行rake db:rollback