我是个白痴...在Rails中搞砸了一次迁移:
以为迁移会像模型生成器一样工作(使用references:modelname
),我做了以下操作:
$ rails g migration add_event_to_photos references:event
创建了迁移的
class AddEventToPhotos < ActiveRecord::Migration
def change
add_column :photos, :references, :event
end
end
现在,我的开发数据库(SQLite3)在photos
表中有一个类型为event
的references
列。
而且我的schema.rb
文件中间有一行代码:
# Could not dump table "photos" because of following StandardError
# Unknown type 'event' for column 'references'
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
那么,如何回滚并保留数据库中的开发数据?如果必须这样做,我甚至可以清空照片表,但不想重新构建整个项目。该怎么办?
顺便说一句 - 对于任何打算犯同样愚蠢错误的人...不要这么做!请使用正确的迁移生成器:
$ rails g migration add_event_to_photos event_id:integer
references
列,这会阻止schema.rb
更新,因为它“无法转储表”照片”...” - Meltemirake db:schema:load
,因为模式已经混乱了... - Meltemidrop
的功能...至少我不知道有这个功能。 - Meltemi