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