gpt4 book ai didi

ruby-on-rails - 验证有条件时数据库中的唯一性验证

转载 作者:行者123 更新时间:2023-11-29 12:45:35 25 4
gpt4 key购买 nike

当有多个进程时,在 Rails 中使用唯一性验证是不安全的,除非约束也在数据库上强制执行(在我的例子中是 PostgreSQL 数据库,所以请参阅 this blog post)。

在我的例子中,唯一性验证是有条件的:只有在模型中的另一个属性变为真时才应该强制执行。所以我有

class Model < ActiveRecord::Base
validates_uniqueness_of :text, if: :is_published?

def is_published?
self.is_published
end
end

所以模型有两个属性:is_published(一个 bool 值)和text(一个文本属性)。如果 is_published 为真,则 textModel 类型的所有模型中应该是唯一的。

使用唯一索引(如链接的博客文章中所建议的那样)限制太多,因为无论 is_published 的值如何,它都会强制执行限制。

有人知道 PostgreSQL 数据库上的“条件”索引吗?或者用其他方法解决这个问题?

最佳答案

是的,使用 partial UNIQUE index .

CREATE UNIQUE INDEX tbl_txt_is_published_idx ON tbl (text) WHERE is_published;

例子:
How to add a conditional unique index on PostgreSQL

关于ruby-on-rails - 验证有条件时数据库中的唯一性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24640182/

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