我尝试创建迁移以向我的用户表添加角色,但我不小心输入了AddRolesToUsers
而不是AddRoleToUser
。所以我尝试使用正确的AddRoleToUsers
创建新的迁移,但是当我尝试运行rake db:migrate
时出现错误:
SQLite3::SQLException: duplicate column name: role: ALTER TABLE "users" ADD "role" integer/Users/miguel/.rvm/gems/ruby-2.2.1/gems/sqlite3-1.3.11/lib/sqlite3/database.rb:91:in `initialize'
我试过rake db:migrate:down VERSION=
删除我必须输入的那个,但我一直得到同样的错误。 PS:我在运行rake db:migrate:down VERSION=
rails g migration AddRoleToUsers role:integer
迁移文件:
class AddRoleToUsers < ActiveRecord::Migration
def change
add_column :users, :role, :integer
end
end
答案 0 :(得分:1)
运行第一次迁移时,角色列已添加到Users表中。第二次迁移的错误告诉你那么多。
要清除migration pending
错误,您需要在新迁移中注释掉add_column
语句。
即,
class AddRoleToUsers < ActiveRecord::Migration
def change
# add_column :users, :role, :integer
end
end
然后运行迁移。这样,新迁移应该成功运行。
您现在可以取消注释并删除以前的迁移,这样在部署时,只会运行较新的迁移并成功添加role
列。
答案 1 :(得分:0)
在这种情况下,右键单击并删除两个迁移文件,然后重新开始。该错误的存在是因为它认为您要将两个名为role的列添加到users表
<强>更新强>
在这种情况下,如果您的用户表中已存在角色,则必须已成功运行迁移,并且无需再运行另一个迁移。只要角色列存在,尝试添加另一个名为role的列将始终给您一个错误。如果你想测试你仍然能够添加新列,你可以随时通过创建测试迁移AddSomethingToUsers来检查:string和rake db:migrate to test,然后rake db:rollback to undo..but看起来它们似乎都是工作,所以我可能不会太乱用它。