gpt4 book ai didi

ruby-on-rails - 添加设备生成的用户表时,Rails 数据库迁移失败并显示 "duplicate column name: email"

转载 作者:数据小太阳 更新时间:2023-10-29 07:32:03 24 4
gpt4 key购买 nike

我正在安装 devise。我遵循了所有必需的步骤并在此处结束:

$ rails generate devise User
$ rake db:migrate

当我运行 rake db:migrate 时,出现以下错误:

$ rake db:migrate
== 20140618020442 AddDeviseToUsers: migrating =================================
-- change_table(:users)
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: email: ALTER TABLE "users" ADD "em
ail" varchar(255) DEFAULT '' NOT NULLc:/appname/db/migrate/20140618020442_add_d
evise_to_users.rb:5:in `block in up'
c:/appname/db/migrate/20140618020442_add_devise_to_users.rb:3:in `up'
c:in `migrate'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

我的项目具有以下数据库架构。某些 devise 迁移看似成功,但迁移并未完成。

ActiveRecord::Schema.define(version: 20140618020442) do

create_table "listings", force: true do |t|
t.string "name"
t.text "description"
t.decimal "price"
t.datetime "created_at"
t.datetime "updated_at"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
end

create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
end

add_index "users", ["email"], name: "index_users_on_email", unique: true
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true

end

问题是什么,我该如何解决?

最佳答案

所以问题是您的数据库中已经有了用户表。如果它不起作用,您需要删除该表并创建一个新表,或者继续使用该表。

删除数据库不是一个好主意,但由于您正在制作一个新应用程序(在创建用户表时),因此在您的情况下,最好删除该数据库并重新创建它(以确保一切正常).按顺序尝试这些命令:

rake db:drop
rake db:create
rake db:migrate

它应该可以正常工作,您不需要 rails generate devise User 因为您已经有了用户迁移文件

更新:

如果您不想删除数据库,那么您可以创建一个新的迁移文件并删除那里的用户表。

rails generate migration DropUsersTable

之后编辑你的迁移文件

class DropUsersTable < ActiveRecord::Migration
def change
drop_table :users
end
end

然后执行rake db:migrate

关于ruby-on-rails - 添加设备生成的用户表时,Rails 数据库迁移失败并显示 "duplicate column name: email",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24276142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com