ker*_*loz 5 ruby-on-rails mongodb mongoid
在我的 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
Run Code Online (Sandbox Code Playgroud)
如果您决定保持模型不变,并且必须保持 4 个集合之间电子邮件的唯一性,我将在其自己的集合中创建一个电子邮件模型,并在电子邮件字段上定义唯一索引:
class Email
include Mongoid::Document
field :email, type: String
index({email: 1}, {unique: true})
end
Run Code Online (Sandbox Code Playgroud)
这样,您所要做的就是尝试创建该电子邮件模型。如果成功,您可以继续创建您想要的特定模型,因为您知道该电子邮件在所有模型中都是唯一的。(此建议与 @huzaifa-saifuddin 的建议类似,但没有将所有模型合并到一个集合中)
然后,唯一性方法定义将对数据库进行一次调用,如下所示:
def email_uniquness_across_models(email)
Email.create(email: email)
true
rescue
false
end
Run Code Online (Sandbox Code Playgroud)
恕我直言,对数据库进行一次调用来确保唯一性比在大多数情况下进行 4 次调用来确保唯一性更好。
此实现将确保唯一性,但您还必须处理失败 - 这意味着处理后续模型创建失败的情况,您现在需要删除电子邮件文档,以便特定电子邮件可用。
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |