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类型event的photos列.
我的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)
我发现这样做的最简单方法是在schema.rb文件中重新创建表/db/.然后我跑了一个rake db:reset(如果它说你有待定的迁移,只需删除它们并再试一次).
这解决了这个问题.
添加一个空的 down 方法并运行 rake db:rollback
编辑啊,这是新的迁移语法,您可以简单地将主体替换为:
def self.down; end
Run Code Online (Sandbox Code Playgroud)
这是旧的语法,或者可能完全删除主体(还没有尝试过)然后运行rake db:rollback
| 归档时间: |
|
| 查看次数: |
5548 次 |
| 最近记录: |