Рельсы: проверьте уникальность двух столбцов (вместе)


у меня есть Release модель medium и country столбцы (среди прочих). Там не должно быть releases одинаковыми medium/country комбинаций.

как бы я написал это в качестве проверки rails?

3 66

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

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