修复迁移错误
Fixing migration error
我试图创建一个迁移以将角色添加到我的用户表,但我不小心输入了 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
在那种情况下,右键单击并删除两个迁移文件并重新开始。存在该错误是因为它认为您要向用户添加两个都命名为 role 的列 table
更新
在这种情况下,如果角色已存在于您的用户 table 中,则必须已成功迁移 运行 并且无需 运行 另一个。只要 role 列存在,尝试添加另一个名为 role 的列总是会出错。如果你想测试你是否仍然能够添加新列,你总是可以通过创建测试迁移 AddSomethingToUsers something:string 和 rake db:migrate 来测试,然后 rake db:rollback 来撤消。但这一切似乎都奏效了,所以我可能不会把它弄得太多。
当您 运行 第一次迁移时,角色列被添加到用户 table。第二次迁移的错误告诉你很多。
要清除migration pending
错误,您需要在新迁移中注释掉add_column
语句。
即,
class AddRoleToUsers < ActiveRecord::Migration
def change
# add_column :users, :role, :integer
end
end
然后运行迁移。这样,新迁移应该 运行 成功。
您现在可以取消注释并删除之前的迁移,这样您部署时,只有较新的迁移是运行并且role
列添加成功。
我试图创建一个迁移以将角色添加到我的用户表,但我不小心输入了 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
在那种情况下,右键单击并删除两个迁移文件并重新开始。存在该错误是因为它认为您要向用户添加两个都命名为 role 的列 table
更新
在这种情况下,如果角色已存在于您的用户 table 中,则必须已成功迁移 运行 并且无需 运行 另一个。只要 role 列存在,尝试添加另一个名为 role 的列总是会出错。如果你想测试你是否仍然能够添加新列,你总是可以通过创建测试迁移 AddSomethingToUsers something:string 和 rake db:migrate 来测试,然后 rake db:rollback 来撤消。但这一切似乎都奏效了,所以我可能不会把它弄得太多。
当您 运行 第一次迁移时,角色列被添加到用户 table。第二次迁移的错误告诉你很多。
要清除migration pending
错误,您需要在新迁移中注释掉add_column
语句。
即,
class AddRoleToUsers < ActiveRecord::Migration
def change
# add_column :users, :role, :integer
end
end
然后运行迁移。这样,新迁移应该 运行 成功。
您现在可以取消注释并删除之前的迁移,这样您部署时,只有较新的迁移是运行并且role
列添加成功。