gpt4 book ai didi

ruby-on-rails - 如何使用 Rails 验证 MongoDB 中模型的唯一性?

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

在我的 rails 应用程序中,我使用 MongoDB。我有 4 个模型,包括管理员。所有实体都有一个电子邮件地址。我需要进行验证以确保电子邮件对于所有模型都是唯一的。
除了在每个模型中搜索电子邮件之外,还有更简单/更好的方法吗?
喜欢


def email_uniquness_across_models(email)
User.where(email: email).exists? ||
Admin.where(email: email).exists? ||
Transporter.where(email: email).exists? ||
Company.where(email: email).exists?
end

最佳答案

如果您设置保持模型原样,并且必须在 4 个集合之间保持电子邮件的唯一性,我将在其自己的集合中创建一个电子邮件模型,并在电子邮件字段上定义一个唯一索引:

class Email
include Mongoid::Document

field :email, type: String
index({email: 1}, {unique: true})
end
这样,您所要做的就是尝试创建该电子邮件模型。如果你成功了,你可以继续创建你想要的特定模型,知道电子邮件在所有模型中都是独一无二的。 (这个建议类似于@huzaifa-saifuddin 的建议,但没有将所有模型合并为一个集合)
然后唯一性方法定义将对数据库进行一次调用,如下所示:
def email_uniquness_across_models(email)
Email.create(email: email)
true
rescue
false
end
恕我直言,最好对 DB 进行一次调用以确保唯一性,而不是 4 次调用以确保唯一性 大多数时代的。
此实现将确保唯一性,但您还必须处理失败 - 这意味着处理后续模型创建失败的情况,您现在需要删除电子邮件文档,以便特定电子邮件可用。

关于ruby-on-rails - 如何使用 Rails 验证 MongoDB 中模型的唯一性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63091023/

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