我在迁移数据库时遇到错误。错误是:
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
但它没有帮助。
答案 0 :(得分:1)
如果模式中存在列,但由于找不到迁移失败,则可能处于不一致的数据库状态(即数据库的当前模式与schema.rb不一致,也不能作为迁移进行迁移与您当前的状态不相容)。有很多方法可以进入该状态,但无论如何,最好的办法是清理数据库并再次迁移:
bin/rake db:reset db:migrate
如果这不起作用,则会出现更严重的问题。如果这是一个相当新的应用,bin/rake db:drop db:create db:migrate
可能会提供帮助;否则,你需要做一些调试和调查。
答案 1 :(得分:0)
有时我为了摆脱这些不一致的数据库状态而做的是,如果它是一个简单的修复,进入实际的数据库并手动修复任何似乎是问题的东西,以便再次进行迁移。
在您的情况下,您似乎缺少角色表中的deleted_at
列。所以你可以做的就是自己创建列。为了在Postgres中做到这一点,你需要做类似的事情:
psql your_database_name
一旦你在那里改变你的roles
表并使用以下命令添加你缺少的列。ALTER TABLE roles ADD COLUMN deleted_at date;
希望有所帮助。