Ruby on rails Rails-根据其他字段验证输入的唯一性

Ruby on rails Rails-根据其他字段验证输入的唯一性,ruby-on-rails,forms,validation,unique,Ruby On Rails,Forms,Validation,Unique,我试图验证一个字段相对于同一记录上其他字段的唯一性 例如,我有10个输入(假设它们被命名为field1、field2、field3等),每个字段都需要是数字1-10。我不希望用户能够在输入中重复输入同一个数字两次 我是否需要按照“如果字段1显示错误!”创建自定义验证字段2!=field3等,或者是否有内置方式提供所有要检查的字段列表?Activerecord没有定义的验证来执行此操作 您必须在行上创建自定义验证 def model ATTRS_TO_VALIDATE = ['attr1',

我试图验证一个字段相对于同一记录上其他字段的唯一性

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


我是否需要按照“如果字段1显示错误!”创建自定义验证字段2!=field3等,或者是否有内置方式提供所有要检查的字段列表?

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(“字段需要是uniq”)ATTRS_TO_VALIDATE是需要验证的属性数组。该语句只选择要检查其唯一性的所有属性的键、值对。然后我们获取这些值,然后只获取唯一值,并将唯一值的长度与ATTRS_的长度进行比较。如果长度小于,则表示字段中有类似的值