2016-03-07 60 views
1

我创建了ROR一个支架,以包含元素之间的一些关系独特的对称双验证

+----------------------+ 
| left | right | score | 
+----------------------+ 

所以,如果我有一个入口a, b, 10,这意味着从ab的关系是10,但作为左,右,代表了同一种实体的fk's,我们可以得出结论,从ba的关系也是10

做这样的事情validates_uniqueness_of :left, :scope => [:right]不会阻止对从表中出现的恢复,像这样:b, a, 10

我想是这样的:

validates_uniqueness_of :left, :scope => [:right] 
validates_uniqueness_of :right, :scope => [:left] 

可以做的伎俩,但有清洁剂或验证对对称的独特性更合适的方法?

一旦这个答案,工作差不多完成了。

如何防止在两列上出现相同的值?

例如。这样的条目不应该被允许:a, a, 15

感谢您的考虑。

+0

可能的复制[您如何验证在Ruby中对IDS on Rails的唯一性?(http://stackoverflow.com/questions/923796/如何做,你验证唯一性的一对红宝石在轨道上) – infused

+0

@infused我没有看到什么是在dup目标这是不是在问题中。此外,它不处理左右交换。 –

回答

0

可能存在针对您的需求的验证。我不知道。

如果没有,可以考虑使用的custom validation

class MyValidator < ActiveModel::Validator 
    def validate(record) 
    unless record.name.starts_with? 'X' 
     record.errors[:name] << 'Need a name starting with X please!' 
    end 
    end 
end 

class Person 
    include ActiveModel::Validations 
    validates_with MyValidator 
end