【问题标题】:Rails - validate uniqueness of input against other fieldsRails - 针对其他字段验证输入的唯一性
【发布时间】:2013-11-29 17:38:34
【问题描述】:

我正在尝试针对同一记录上的其他字段验证字段的唯一性。

例如,我有 10 个输入(假设它们被命名为 field1、field2、field3 等),每个字段都需要是 1-10 的数字。我不希望用户能够两次输入相同的数字。

我是否需要按照 show an error if field1 != field2 != field3 etc 的方式创建自定义验证,或者是否有内置方法来提供所有要检查的字段列表?

【问题讨论】:

    标签: ruby-on-rails forms validation unique


    【解决方案1】:

    Activerecord 没有定义的验证来执行此操作。

    您必须在行上创建自定义验证

    def model
      ATTRS_TO_VALIDATE = ['attr1', 'attr2', 'attr3']
      attributes_accessible :attr1, :attr2, :attr3
      validate :custom_validation
    
      def custom_validation
        unless self.attributes.select{|k,v| ATTRS_TO_VALIDATE.include?(k)}.values.uniq.length == ATTRS_TO_VALIDATE.length
          error.add("fields need to be uniq")
        end
      end
    end
    

    希望这能解决你的问题

    【讨论】:

    • 你能解释一下吗?我不明白这部分 - 除非 self.attributes.select{|k,v| ATTRS_TO_VALIDATE.include?(k)}.values.uniq.length == ATTRS_TO_VALIDATE.length error.add("fields need to be uniq")
    • ATTRS_TO_VALIDATE 是您需要验证的属性数组。该语句只选择要检查唯一性的所有属性的键、值对。然后我们获取这些值,然后只获取唯一值,并将唯一值的长度与 ATTRS_TO_VALIDATE 的长度进行比较。如果长度小于则表示字段中有相似的值
    猜你喜欢
    • 2021-07-04
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 2018-04-30
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多