У меня есть Release
модель с medium
и country
столбцов (среди прочих). Не должно быть releases
общих одинаковых medium
/ country
комбинаций.
Как мне написать это как проверку рельсов?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-4
activerecord
rails-activerecord
Джексон Каннингем
источник
источник
Ответы:
Вы можете использовать проверку уникальности с
scope
опцией.Кроме того, вы должны добавить уникальный индекс в БД, чтобы новые записи не проходили проверки при одновременной проверке перед записью:
источник
unique
что он не распознается. Для этой части я использовал ответ ниже.uniqueness
, а неunique
. См. Связанную документацию. Исправляем ответ.Во всех приведенных выше ответах не хватает того, как проверить уникальность нескольких атрибутов в модели. В приведенном ниже коде показано, как использовать несколько атрибутов в области.
Он проверяет уникальность
country
во всех строках со значениямиmedium
иanother_medium
.Примечание. Не забудьте добавить индекс в столбец выше, это обеспечивает быстрое извлечение и добавляет проверку уровня БД для уникальных записей.
Обновление: для добавления индекса при создании таблицы
источник
Вы можете передать
:scope
параметр своему валидатору следующим образом:Смотрите в документации еще несколько примеров.
источник