1

У меня есть модель Track, которая имеет два атрибута:Проверка цифровой уникальность двух атрибутов в Rails

disc который представляет то, что диск трек принадлежит и number, который представляет собой числовой порядок трека на альбоме.

Я хотел бы подтвердить уникальность номера трека, где может быть только один уникальный номер трека на диск. Например, на диске 1 (или диске 2) может быть только один трек с дорожкой number из 1.

Есть ли уже существующий способ сделать это в проверке уникальности Rails, где один атрибут зависит от другого ? Если это не лучший способ написать пользовательскую проверку?

ответ

1

Вы можете попробовать validates_uniqueness_of с scope:

validates_uniqueness_of :number, scope: [:disc, album_id] 

Кстати, на уровне базы данных, вы должны также проверить его с unique index:

add_index :table_name , [:number, :disc, :album_id], unique: true 

или использовать камень обеспечения Составной Ключевой особенностью.

+0

Спасибо. До сих пор я никогда не понимал, что «scope» можно использовать для таргетинга атрибутов. Из любопытства, у вас есть драгоценный камень, который вы бы рекомендовали, чтобы это сделать? Конечно, добавление индекса в db достаточно просто, но всегда открытое в слуховых альтернативах. –

+0

@ Карл Эдвард: Существует [эта реализация] (https://github.com/composite-primary-keys/composite_primary_keys), но вы также должны просмотреть обсуждения об использовании этого (вы можете найти их на этом сайте, на самом деле) , – potashin

+1

Спасибо за понимание. –

Смежные вопросы