2012-01-25 79 views
1

我有軌道模型具有兩個屬性:ticket_id:parent_ticket_id。我想驗證,只有有這兩個值的記錄。例如,唯一性反向驗證軌道模型

應該有一個且只有紀錄4和1

:ticket_id => 4, :parent_ticket_id => 1 

而且我不希望有任何的組合這兩個相同的價值觀更多的行。沒有什麼(1,4)或(4,1)。

validates :ticket_id, :uniqueness => true, :scope => :parent_ticket_id有用嗎?我想這將阻止剛(1,4)的組合,而不是(4,1)..

回答

0

我不認爲這是目前在Rails中,你必須寫自己喜歡的東西下面

validate :some_method_name 

def some_method_name 
    if ModelName.exists?(:ticket_id => self.ticket_id, :parent_ticket_id => self.parent_ticket_id) || ModelName.exists?(:ticket_id => self.parent_ticket_id , :parent_ticket_id => self.ticket_id) 
    self.errors.add :base, '<Your ERROR Message Here>' 
    end 
end 

否檢查雖然

2

您可以在自定義驗證做到這一點(這個查詢看起來在一個查詢與薩里爾使用兩種不同的查詢做到兩者兼得):

validate :ticket_and_parent_ticket_are_unique 

private 
    def ticket_and_parent_ticket_are_unique 
    errors.add(:base, 'They are not unique') if ModelName.exists?(:ticket_id => [self.ticket_id, self.parent_ticket_id], :parent_ticket_id => [self.ticket_id, self.parent_ticket_id]) 
    end