Validation 交换值时如何验证范围内的唯一性?
我有一个叫做LocationRule的模型。LocationRule有多个:rule\u部分,并接受:rule\u部分的\u嵌套的\u属性 RulePart有一个名为position的属性。我通过以下方式验证该职位: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
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(:位置“已采取”)
错误=真
其他的
位置