Блок транзакций предотвращает коммит в базе данных, как мы можем пропустить определенную вещь? - PullRequest
0 голосов
/ 05 ноября 2019

Я использую блок транзакции и выполняю некоторые операции внутри блока, есть определенные вещи, которые должны игнорировать блок транзакции, я не могу переместить обновление из блока транзакции, поскольку оно тесно связано с кодом.

Как мы можем пропустить определенную часть и позволить поведению покоя как обычно

Record.transaction do
  check_for_errors required_columns
  create_report
end

def check_for_errors
 loop
  ...
 begin
  Methods
  // want to skip this perticular db update from transaction block
  job.update_column(total_number: loop index)
  // as this is under transaction block no changes can be seen on ui
 rescue => e
    populate_error_message(e.message)
    raise ActiveRecord::Rollback
  end
 end
end

Есть идеи, что можно сделать в этом случае?

1 Ответ

0 голосов
/ 06 ноября 2019

Чтобы пропустить определенное действие БД в существующей транзакции, вы можете выполнить его в отдельном потоке. Например, для вашего случая выше

  ...
  Thread.new do
    ActiveRecord::Base.connection_pool.with_connection do
      job.update_column(total_number: loop_index)
    end
  end.join
  ... # continue method
...