我有一个“简单”的 rails 问题,我找不到任何文档,我希望有人能指出我正确的方向。
我有一个模型,称为具有状态属性的类别。我希望能够验证状态不同于“void”的所有记录中类别名称的唯一性。
为了实现这一点,现在我创建了一个自定义验证器,但我想有一个内置选项可以实现这一点。我对吗?
谢谢。
我有一个“简单”的 rails 问题,我找不到任何文档,我希望有人能指出我正确的方向。
我有一个模型,称为具有状态属性的类别。我希望能够验证状态不同于“void”的所有记录中类别名称的唯一性。
为了实现这一点,现在我创建了一个自定义验证器,但我想有一个内置选项可以实现这一点。我对吗?
谢谢。
您可能想看看条件验证。例如,如果您.not_void?
的模型上有一个方法,您可以使用:
validates :category, uniqueness: true, if: :not_void?
还有使用字符串(得到eval
'd)或 proc 的选项——查看验证指南以获取更多信息。
编辑:基于澄清问题的新答案
据我了解,使用内置验证器实现您所追求的目标可能有点困难,因为您想验证任何非无效状态的唯一性。可以使用该:scope
选项检查限制记录的唯一性确定,因此您可以查看向表中添加一个额外的布尔字段并使用它来确定唯一性。例如,如果您向void
表/模型添加了一个属性,您可以获得您想要的行为
# category.rb
before_validation :set_void
def set_void
self.void = (state == "void")
end
validates :category, uniqueness: { scope: :void }, unless: :void
这将在验证之前自动更新void
属性,然后验证类别的名称与所有其他非无效类别相比是唯一的(只要该类别自己的状态不是无效的)。