Как установить уровень изоляции транзакции с помощью соединения ActiveRecord? [рекомендую драгоценный камень] - программирование
Подтвердить что ты не робот

Как установить уровень изоляции транзакции с помощью соединения ActiveRecord? [рекомендую драгоценный камень]

Мне нужно управлять уровнем изоляции транзакций на основе транзакций способом переносимым для баз данных (по крайней мере, SQLite, PostgreSQL, MySQL).

Не могли бы вы порекомендовать gem, который расширяет адаптеры подключения к базам данных ActiveRecord, чтобы это разрешить?

Я знаю, что могу сделать это вручную, например:

User.connection.execute('SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE')

... но я бы ожидал чего-то вроде:

User.isolation_level( :serializable ) do
  # ...
end
4b9b3361

Ответ 2

Эта функция поддерживается самим ActiveRecord:

MyRecord.transaction(isolation: :read_committed) do
  # do your transaction work
end

Он поддерживает уровни изоляции ANSI SQL:

  • :read_uncommitted
  • :read_committed
  • :repeatable_read
  • :serializable

Этот метод доступен с Rails 4, он был недоступен, когда ОП задал вопрос. Но для любого прилично современного Rails-приложения это должен быть путь.