【发布时间】:2021-07-04 00:57:57
【问题描述】:
如何根据其他列是否有价值而不是实际内容来验证模型中的唯一性?范围似乎比较了第二列的内容。例如,我的用户模型列中有 email 和 project_id (都是字符串)等等。如果 project_id 为空或具有任何值,我想验证电子邮件是否唯一。使用范围允许创建对象 {email: 'a@a.a', project_id: nil}, {email: 'a@a.a', project_id: '1'}, {email: 'a@a.a', project_id: '2'} 等等。我想限制电子邮件的唯一性,以便前两个对象成为可能(project_id 为 nil 或 1 具有相同的电子邮件),最后一个对象会抛出错误“电子邮件已被使用”,因为当 project_id 具有值时,已经有用户使用相同的电子邮件.是否有适当的 Rails 方法来实现这一点,还是我需要编写一些自定义验证?
当然,我也有更好的电子邮件验证,不会接受'a@a.a',这只是一个例子:)
【问题讨论】:
-
这能回答你的问题吗? Rails - Validation :if one condition is true
-
不完全是因为这只是在满足条件时验证存在。我需要始终根据其他列的存在来验证唯一性。基本上,一封电子邮件最多允许 2 次,并且 project_id 为 nil 或具有任何值。
-
我认为这里最简单的事情是有一个“空”项目,用于将您的 project_id 评估为 nil 的目的。这样您就可以在唯一性验证中使用标准范围。