无法迁移数据库 rails,出现错误

Can't migrate db rails, getting an error

我在迁移数据库时遇到错误。错误是:

PG::UndefinedColumn: ERROR:  column roles.deleted_at does not exist
LINE 1: SELECT "roles".* FROM "roles"  WHERE ("roles"."deleted_at" I...
                                              ^
: SELECT "roles".* FROM "roles"  WHERE ("roles"."deleted_at" IS NULL)

这是我的部分schema.rb:

create_table "roles", :force => true do |t|
t.string   "name"
t.string   "title"
t.integer  "resource_id"
t.string   "resource_type"
t.datetime "created_at",    :null => false
t.datetime "updated_at",    :null => false
t.datetime "deleted_at"
end

我试过:

rails generate migration AddDeletedAtToRoles deleted_at           

但这并没有帮助。

如果您的模式中存在列,但由于未找到而导致迁移失败,则您可能处于不一致的数据库状态(即,您的数据库的当前模式与 schema.rb 不一致,您也不能迁移,因为迁移与您当前的状态不兼容)。进入该状态的方法有很多,但无论如何,最好的办法是清除数据库并再次迁移:

bin/rake db:reset db:migrate

如果这不起作用,则说明您有更严重的问题。如果这是一个相当新的应用程序,bin/rake db:drop db:create db:migrate 可能会有所帮助;否则,您需要进行一些调试和调查。

有时我为了摆脱这些不一致的数据库状态而做的是,如果这是一个简单的修复,进入实际的数据库并手动修复任何看起来有问题的地方,以便让迁移再次进行。

在您的情况下,您似乎缺少角色 table 中的 deleted_at 列。所以你可以做的是自己创建列。为了在 Postgres 中做到这一点,你需要做类似的事情:

  1. psql your_database_name 一旦你在那里改变你的 roles table 并使用以下命令添加你缺少的列。
  2. ALTER TABLE roles ADD COLUMN deleted_at date;

希望对您有所帮助。