我更改了正在运行的迁移文件,因为我犯了拼写错误。
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:
很抱歉,这有一个简单的解决方案。新的铁路。
2条答案
按热度按时间tjrkku2a1#
bin/rails db:rollback
这将删除上次迁移中所做的更改。运行上述命令后,删除db/migrate中出现的最后一个迁移文件。
htzpubme2#
运行
rake db:migrate:status
将给予迁移的当前状态。如果
AdStatusToComments
为“up”,它将解释为什么您会得到错误... duplicate column name: status
-原始迁移运行了但没有回滚。正如@koil提到的,你可以把它滚回去。
以后--不要编辑处于“up”状态的迁移文件(或者已经签入源代码管理!)