2012-02-27 4 views
1

В моем RESTful API у меня есть проверка уникальности для некоторого столбца базы данных «X» в моем классе ActiveRecord, и я использую activerecord-import gem для данных с объемным объемом. Мое приложение должно отклонять запросы в обоих следующих случаях:Ruby/Rails, проверка уникальности ActiveRecord и атрибут activerecord-import

  1. Отклонить новый объект, если существует запись в БД, которая имеет тот же «X» значение
  2. Отклонить сыпучие экономии двух объектов, которые имеют то же значение «Х»

Кажется, что (1.) работает нормально, но (2.) нет. Это можно ожидать (возможно, потому, что проверка уникальности ActiveRecord выполняется «вне» db), и если да, есть ли простой способ справиться с этой проблемой, кроме проверки вручную, прежде чем импортировать новые данные?

ответ

1

Важная информация, связанная с активацией-импортом enforces validations by default, но, возможно, обрабатывает проверку уникальности по-разному. Если база данных поддерживает ее, есть on_duplicate_key_update, который обновит другой столбец, если найдет дубликаты ключей. More about this on the wiki. MySql поддерживает его.

Таким образом, вы можете либо иметь столбец типа флага, который обновляется с помощью on_duplicate_key_update всякий раз, когда есть попытки сохранить дубликаты. Или вы должны сделать это один проверку вручную

Edit Ответ не может быть правильным, пожалуйста, обратитесь к комментариям Op для уточнения деталей.

+0

как указано выше, пример (1) работает нормально - поэтому он, похоже, поддерживает некоторую валидацию уникальности, но (2) этого не делает. –

+1

, похоже, что поведение в (2) ожидается, поскольку метод 'import' просто вызывает' valid? 'Для каждого из объектов, которые не знают друг о друге до сохранения (поэтому проверка уникальности не будет потерпеть неудачу) –

Смежные вопросы