Обработка исключений в рельсах - PullRequest
0 голосов
/ 16 марта 2019

Мне немного неясно, как обрабатывать исключения при использовании транзакций с активной записью в рельсах. Я видел, как многие из них использовали,

Метод: 1

def update
  ActiveRecord::Base.transaction do
    begin
      # Some logic
    rescue StandardError => e
      raise ActiveRecord::Rollback
    end
  end
end

и видел приведенную ниже логику во многих местах.

Метод: 2

def update
  ActiveRecord::Base.transaction do
   if object.update(update_params)
     # success
   else
     # error handling
    end
  end

rescue => e
  # error handling
end

То, что я считаю вторым методом, достаточно. Я думал, что сама транзакция откатится, если произойдет что-то непредвиденное или какая-либо логическая ошибка внутри транзакции, и мы сможем отловить их и сделать все, что захотим. Нужно ли перехватывать исключения внутри транзакции и вручную поднимать откат ? В чем разница между методами и в каком случае?

1 Ответ

0 голосов
/ 17 марта 2019

Вам не нужно вручную откатывать транзакцию, приведенный ниже код должен быть достаточно хорошим

def update

  ActiveRecord::Base.transaction do
    foo.update(foo_update_params)
  end

rescue ActiveRecord::RecordInvalid
  # Handle your exception here
end

Посмотрите здесь для лучшего объяснения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...