Rails: проверка уникальности двух столбцов (вместе)
У меня есть модель Release
с столбцами medium
и country
(среди прочих). Не должно быть releases
, которые имеют одинаковые комбинации medium
/country
.
Как я могу написать это как проверку рельсов?
Ответы
Ответ 1
Вы можете использовать проверку uniqueness с опцией scope
.
Кроме того, вы должны добавить уникальный индекс в БД, чтобы предотвратить прохождение новых записей при проверке в одно и то же время перед записью:
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
Ответ 2
Вы можете передать параметр :scope
на свой валидатор следующим образом:
validates_uniqueness_of :medium, scope: :country
Дополнительную информацию см. в документации.
Ответ 3
Все приведенные выше ответы отсутствуют, как проверить уникальность нескольких атрибутов в модели. В приведенном ниже коде рассказывается, как использовать несколько атрибутов в области.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Он проверяет уникальность country
во всех строках со значениями medium
и another_medium
.
Примечание. Не забудьте добавить индекс в приведенный выше столбец, это обеспечивает быстрый поиск и добавляет проверку уровня БД для уникальных записей.