2013-05-17 85 views
0

我的模型結構如下:用的has_many關係唯一驗證

class Client < ActiveRecord::Base 
    has_many :charts 
end 

class Chart < ActiveRecord::Base 
    belongs_to :client 
    has_many :chart_data 
end 

class ChartDatum < ActiveRecord::Base 
    belongs_to :chart 
end 

ChartDatum有一個名爲「名稱」的屬性,其需要爲每個客戶端是唯一的。 我試過使用「validates_uniqueness_of:name,:scope => [:chart_id]」但這幫助我爲特定的圖表獲取唯一的鍵值,但不是針對特定客戶端的所有圖表。我正在尋找類似於「validates_uniqueness_of:name,:scope => [:client_id]」,但顯然與目前的結構,它不會工作。

有人能幫我嗎?

+0

您要爲屬於特定客戶端的所有chart_data相同的密鑰? –

+0

我想爲每個客戶端提供唯一的chart_data。 – Yahya

+0

但它沒有直接聯繫... –

回答

0

既然你需要chart_data獨特name爲每個客戶端,你可以嘗試寫的名字是這樣定義驗證:

class ChartDatum < ActiveRecord::Base 
    belongs_to :chart 
    validates :name, :uniqueness => true, unless => :unique_for_client? 

    def unique_for_client? 
    client = self.chart.client 
    client.charts.chart_data.pluck(:name).include?(self.name) 
    end 
end