我创建了迁移:
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
然后我进行了另一次迁移并立即回滚 - 结果是一样的。
出了什么问题?
答案 0 :(得分:3)
SQLite不支持删除现有列,因此可能通过创建一个包含所有现有列但正在删除的列的新表来实现。旧表被删除,这会导致错误。
我建议使用其他一些数据库(我推荐postgres),但SQLite不适合在生产中使用。
另见: