提问人:supersaidso 提问时间:10/12/2023 更新时间:10/12/2023 访问量:40
如何在 Rails 中覆盖 PostgreSQL 的 gen_random_uuid()?
How can I override PostgreSQL's gen_random_uuid() in Rails?
问:
我想在PostgreSQL的gen_random_uuid()生成的uuid前面添加一个字符串,以用作我的一个模型的uuid(它不会是主键)。
想想 Stripe 的价格和客户 ID,以及"price_xxxx..."
"cus_xxxx..."
目前我正在像这样使用 gen_random_uuid():
t.uuid "uuid", default: -> { "gen_random_uuid()" }, null: false
有没有可能做这样的事情,
t.uuid "uuid", default: -> { "xxx" + "gen_random_uuid()" }, null: false
?
答:
1赞
Arctodus
10/12/2023
#1
在模型级别求解它可能是一种选择
class MyModel < ApplicationRecord
attribute :uuid, default: -> { "xxx_#{SecureRandom.uuid}" }
end
评论
0赞
supersaidso
10/12/2023
谢谢,我想到了这一点,我只是认为如果我在数据库级别这样做,性能会更好。不过,我不知道收益是微不足道的还是不存在的。这种解决方案在实践中如何运作?uuid 是在实例化记录时定义为此默认值,还是在实例化后更新?
1赞
Lorin Thwaits
10/12/2023
#2
如果您想要特定于 Postgres 的解决方案,请尝试以下操作:
t.uuid 'uuid', default: -> { "'xxx' || gen_random_uuid()" }, null: false
(Postgres 通过 ||(进行字符串连接),并将“ticks”(撇号)中的文本识别为字符串。
评论
0赞
supersaidso
10/12/2023
哦,太棒了,谢谢!
评论
default: -> { "'xxx' + gen_random_uuid()" }
syntax error, unexpected '}', expecting => ... "xxx_" + "gen_random_uuid()" }