Как выполнить оператор SQL после загрузки фиксаторов, но до создания точки сохранения?

0

У нас есть модель, которая получает номер последовательности из идентификатора другой модели, используя auto_increment в другой таблице моделей. Это значение устанавливается равным нулю всякий раз, когда сервер db перезапускается, поэтому порядковые номера reset. Чтобы обойти это, в блоке after_initialize мы устанавливаем значение auto_increment для максимального значения последовательности плюс один, и все хорошо.

Однако в тестах блок запускается до загрузки приборов, поэтому максимум возвращается как нуль. Затем, когда тесты выполняются, значение слишком низкое, и поэтому тесты терпят неудачу.

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

Как изменить значение AUTO_INCREMENT после загрузки светильников, но до создания точки сохранения?

Теги:
auto-increment

1 ответ

0
Лучший ответ

Наконец, нашел способ сделать это с помощью патча обезьяны load_fixtures в конце test_helper.rb:

module ActiveRecord
  module TestFixtures
    def load_fixtures_with_auto_increment_reset
      load_fixtures_without_auto_increment_reset
      # code to reset auto_increment goes here
    end

    alias_method :load_fixtures_without_auto_increment_reset, :load_fixtures
    alias_method :load_fixtures, :load_fixtures_with_auto_increment_reset
  end
end

Ещё вопросы

Сообщество Overcoder
Наверх
Меню