gpt4 book ai didi

ruby-on-rails - 如何使用 Rails 为所有迁移文件设置默认的 'uuid-ossp' 扩展名?

转载 作者:太空宇宙 更新时间:2023-11-03 17:33:50 26 4
gpt4 key购买 nike

如何为所有迁移文件设置默认的 'uuid-ossp' 扩展名?

enable_extension 'uuid-ossp'

我正在使用 Ruby 2.1、Rails 4 和 PostgreSQL。

最佳答案

Rails 4 原生支持 Postgres 中的 UUID(通用唯一标识符)类型。在这里,我将介绍如何使用它来生成 UUID,而无需在 Rails 代码中手动执行。

首先你需要启用Postgres扩展‘uuid-ossp’:

class CreateUuidPsqlExtension < ActiveRecord::Migration
def self.up
enable_extension "uuid-ossp"
end

def self.down
disable_extension "uuid-ossp"
end
end

您可以使用 UUID 作为 ID 替换:

create_table :translations, id: :uuid do |t|
t.string :title
t.timestamps
end

在这种情况下,Translations 表将有一个 UUID 作为 ID,它是自动生成的。 Postgresq 中的 uuid-ossp 扩展有不同的算法来生成 UUID。 Rails 4 默认使用 v4。您可以在此处阅读有关这些算法的更多信息:http://www.postgresql.org/docs/current/static/uuid-ossp.html

但是,有时您不想将 UUID 用作 ID 替换,而是将其放在单独的列中:

class AddUuidToModelsThatNeedIt < ActiveRecord::Migration
def up
add_column :translations, :uuid, :uuid
end

def down
remove_column :translations, :uuid
end
end

这将创建一个 UUID 列,但 UUID 不会自动生成。您必须使用 SecureRandom 在 Rails 中自己完成。但是,我们认为这是典型的数据库职责。幸运的是,add_column 中的默认选项有助于:

class AddUuidToModelsThatNeedIt < ActiveRecord::Migration
def up
add_column :translations, :uuid, :uuid, :default => "uuid_generate_v4()"
end

def down
remove_column :translations, :uuid
end
end

现在 UUID 将被自动创建,同样适用于现有记录!

我希望这能帮助您理解.. 如果这篇文章让您对 UUID 的理解感到满意,那么请给这个答案投上一票...;)通过赫尔穆特

关于ruby-on-rails - 如何使用 Rails 为所有迁移文件设置默认的 'uuid-ossp' 扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24299312/

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