Рельсы: проверьте уникальность двух столбцов (вместе)
у меня есть Release модель medium и country столбцы (среди прочих). Там не должно быть releases одинаковыми medium/country комбинаций.
как бы я написал это в качестве проверки rails?
3 ответа:
можно использовать уникальность проверка с помощью .
кроме того, вы должны добавить уникальный индекс в БД, чтобы новые записи не проходили проверку при одновременной проверке перед записью:
class AddUniqueIndexToReleases < ActiveRecord::Migration def change add_index :releases, [:country, :medium], unique: true end end class Release < ActiveRecord::Base validates :country, uniqueness: { scope: :medium } end
все вышеперечисленные ответы отсутствуют, как проверить уникальность нескольких атрибутов в модели. В приведенном ниже коде рассказывается, как использовать несколько атрибутов в области видимости.
validates :country, uniqueness: { scope: [:medium, :another_medium] }Он проверяет уникальность
countryво всех строках со значениямиmediumиanother_medium.Примечание: не забудьте добавить индекс в вышеприведенный столбец, это гарантирует быстрый поиск и добавляет проверку уровня БД для уникальных записей.
Вы можете пройти
:scopeпараметр для вашего валидатора следующим образом:validates_uniqueness_of :medium, scope: :countryпосмотреть документация дополнительные примеры.