Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 交换值时如何验证范围内的唯一性?_Validation_Ruby On Rails 4_Activerecord - Fatal编程技术网

Validation 交换值时如何验证范围内的唯一性?

Validation 交换值时如何验证范围内的唯一性?,validation,ruby-on-rails-4,activerecord,Validation,Ruby On Rails 4,Activerecord,我有一个叫做LocationRule的模型。LocationRule有多个:rule\u部分,并接受:rule\u部分的\u嵌套的\u属性 RulePart有一个名为position的属性。我通过以下方式验证该职位: validates_uniqueness_of :position, scope: :location_rule_id, if: -> (record) { record.location_rule_id = record.location_rule.id if record

我有一个叫做LocationRule的模型。LocationRule有多个:rule\u部分,并接受:rule\u部分的\u嵌套的\u属性

RulePart有一个名为position的属性。我通过以下方式验证该职位:

validates_uniqueness_of :position, scope: :location_rule_id, if: -> (record) { record.location_rule_id = record.location_rule.id if record.location_rule.present?; true }
有一个问题。当我尝试交换规则部分中的位置值时,两个规则部分都出现了一个错误,即:

Position has already been taken
我试图解决这个问题,试图在验证之后、保存之前删除错误。在验证阶段有更好的方法吗

更新1 我决定在位置规则验证器中验证规则部分的重复。但我想知道是否有更好的方法

validate :check_uniqueness_of_rule_part_positions

def check_uniqueness_of_rule_part_positions
  positions = []
  errors = false
  self.rule_parts.each do |rp|
    if positions.include? rp.position
      rp.errors.add(:position, 'is already taken')
      errors = true
    else
      positions << rp.position
    end
  end

  self.errors.add(:priority_numbers, 'Duplication detected') if errors
end
validate:检查规则位置的唯一性
def检查规则零件位置的唯一性
职位=[]
错误=错误
自治|每个零件都有| rp|
如果包括?位置
rp.errors.add(:位置“已采取”)
错误=真
其他的
位置