我创建了迁移:
class AddVisibleToStocks < ActiveRecord::Migration[5.2]
def change
add_column :stocks, :visible, :boolean
end
end
我迁移了它。一切正常,但当我需要回滚时,我看到错误:
rake db:rollback
== 20180404150630 AddVisibleToStocks: reverting ===============================
-- remove_column(:stocks, :visible, :boolean)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
SQLite3::ConstraintException: FOREIGN KEY constraint failed: DROP TABLE "stocks"
我的股票型号:
class Stock < ApplicationRecord
belongs_to :category
has_and_belongs_to_many :providers
end
然后我又进行了一次迁移,并立即将其回滚-结果是相同的。
发生了什么?
最佳答案
sqlite不支持删除现有列,因此它可能是通过创建一个新表来实现的,该表包含所有现有列,但其中一列被删除。旧表被删除,这将导致错误。
我建议使用其他数据库(我建议使用postgres),sqlite无论如何都不适合在生产上使用。
参见:
rails + sqlite - Can't remove columns from database due to foreign key issue
http://www.sqlite.org/lang_altertable.html