【问题标题】:Can't rollback migration无法回滚迁移
【发布时间】:2018-09-14 05:59:51
【问题描述】:

我创建了迁移:

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

然后我又进行了一次迁移并立即将其回滚 - 结果是一样的。

怎么了?

【问题讨论】:

  • 请分享Stock模型中的代码。
  • 好的,我分享了代码

标签: ruby-on-rails ruby sqlite activerecord migration


【解决方案1】:

SQLite 不支持删除现有列,因此它可能是通过创建一个包含所有现有列但被删除的列的新表来实现的。旧表被删除,这会导致错误。

我建议使用其他数据库(我推荐 postgres),SQLite 无论如何都不适合在生产环境中使用。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 2016-01-05
    • 1970-01-01
    • 2022-12-30
    • 2014-06-21
    • 2013-03-04
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多