2016-03-07 58 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