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

посмотреть документация дополнительные примеры.