gpt4 book ai didi

ruby-on-rails - rails 5 : How can I change an existing model's ID type to UUID?

转载 作者:行者123 更新时间:2023-12-01 17:01:21 25 4
gpt4 key购买 nike

我正在尝试将 Devise User 模型的 ID 类型更改为 uuid。

我的迁移如下所示:

class ChangeUserIdTypeToUuid < ActiveRecord::Migration[5.2]

def up
change_column :users, :id, :uuid
end

def down
change_column :users, :id, :integer
end
end

但是当我运行迁移时出现错误:

== 20180909205634 ChangeUserIdTypeToUuid: migrating ===========================
-- change_column(:users, :id, :uuid)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

PG::DatatypeMismatch: ERROR: column "id" cannot be cast automatically to type uuid
HINT: You might need to specify "USING id::uuid".
: ALTER TABLE "users" ALTER COLUMN "id" TYPE uuid

那里有一个提示,但我不知道它在建议我做什么。不是这个:

change_column :users, :id, id::uuid

为什么迁移失败?提示是什么?如何将 ID 类型更改为 UUID?

最佳答案

引用post有人建议将其重复,我已设法将 id 类型更改为 uuid,如下所示:

class ChangeUserIdTypeToUuid < ActiveRecord::Migration[5.2]

def change
add_column :users, :uuid, :uuid, default: "gen_random_uuid()", null: false

change_table :users do |t|
t.remove :id
t.rename :uuid, :id
end
execute "ALTER TABLE users ADD PRIMARY KEY (id);"
end
end

与链接问题中最佳答案的区别在于 UUID 的生成方式。我使用 postgresql 作为我的开发数据库,​​所以我使用 gen_random_uuid() 它是由 pgcrypto 扩展提供的,我之前在准备在另一个中使用 UUID 时启用了该扩展型号:

class EnablePgcryptoExtension < ActiveRecord::Migration[5.2]
def change
enable_extension 'pgcrypto'
end
end

关于ruby-on-rails - rails 5 : How can I change an existing model's ID type to UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52248753/

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