ruby-on-rails 尝试迁移时如何修复“重复列名错误”?

rslzwgfq  于 2023-08-08  发布在  Ruby
关注(0)|答案(2)|浏览(117)

我更改了正在运行的迁移文件,因为我犯了拼写错误。

bin/rails generate migration AdStatusToComments status:string

字符串
应该是“AddStatus...”
我继续更改生成的文件名并手动添加了一个列。
如下:20230717083032_添加_status_to_comments

class AddStatusToComments < ActiveRecord::Migration[7.0]
  def change
    **add_column :articles, :status, :string**
  end
end


本以为运行db:migrate后会修复这个问题,但没有发生。
收到此错误:

$ bin/rails db:migrate
== 20230717083032 AddStatusToComments: migrating ==============================
-- add_column(:articles, :status, :string)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: status
C:/blog/db/migrate/20230717083032_add_status_to_comments.rb:3:in `change'

Caused by:
ActiveRecord::StatementInvalid: SQLite3::SQLException: duplicate column name: status
C:/blog/db/migrate/20230717083032_add_status_to_comments.rb:3:in `change'


已尝试rake db:reset,但得到“Permission Denied”as suggested by this post:
很抱歉,这有一个简单的解决方案。新的铁路。

tjrkku2a

tjrkku2a1#

bin/rails db:rollback
这将删除上次迁移中所做的更改。运行上述命令后,删除db/migrate中出现的最后一个迁移文件。

htzpubme

htzpubme2#

运行rake db:migrate:status将给予迁移的当前状态。
如果AdStatusToComments为“up”,它将解释为什么您会得到错误... duplicate column name: status-原始迁移运行了但没有回滚。
正如@koil提到的,你可以把它滚回去。
以后--不要编辑处于“up”状态的迁移文件(或者已经签入源代码管理!)

相关问题