2012-01-25 2 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 
Смежные вопросы