Уникальность в обратной валидации для модели рельсов - PullRequest
1 голос
/ 25 января 2012

У меня есть модель рельсов с двумя атрибутами :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) ..

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Вы можете сделать это в пользовательском валидаторе (этот запрос выглядит в обоих запросах в обоих направлениях по сравнению с Salil, использующим два разных запроса):

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
0 голосов
/ 25 января 2012

Я не думаю, что это присутствует в 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

Нет, хотя проверить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...