2012-09-24 96 views
3

验证的唯一我已经得到了这些模型:轨父范围

subdomain 
company 
tool 
code 

代码belongs_to的工具,工具的公司,公司的子域。
我想验证子域内代码的唯一性。我怎样才能做到这一点? 我知道如何使用范围来获得的唯一工具范围内是这样的:

validates :codevalue, :uniqueness => {:scope => :tools_id} 

,但如何做到这一点的范围以上两个父母?

我正在使用最新的rails版本。

+2

我不认为'validates_uniqueness'可以做到这一点。也许你应该写你自己的验证? (http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations) – Wukerplank

+0

自定义验证器也可以。我知道如何编写和使用它们,但我没有确切的想法如何以一种或多或少的高性能方式检查唯一性。 – kannix

回答

3

我有这样的自定义验证解决了这个问题:

def validate_uniqueness_in_subdomain 
    Barcode.where(:value => self.value).each do |code| 
    next if code.eql?(self) 
    if (self.tool.company.subdomain.id == code.tool.company.subdomain.id) 
     errors.add(:unique_error, "This barcode is already in use") 
     break 
    end 
    end 
end