2012-09-24 125 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