Rails: проверка уникальности двух столбцов (вместе)
у меня есть 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
посмотреть документация дополнительные примеры.