Исключение Ruby Rescue не срабатывает

Ruby 2.3.7p456 Rails 5.2.2 iMac macOS Mojave v 10.14.3

Фрагмент кода ниже вызывает ошибку ActiveRecord::RecordNotFound по адресу @cart = Cart.find(nil), но блок восстановления никогда не срабатывает.

Спасибо за вашу помощь, пожалуйста, дайте мне знать, если есть что-то еще, что мне нужно предоставить.

 module CurrentCart
  private
  def set_cart
    @cart = Cart.find(nil)
  rescue ActiveRecord::RecordNotFound
    puts 'There was an ActiveRecord::RecordNotFound error'
  end
end

person John    schedule 15.02.2019    source источник
comment
Каков результат запуска этого кода? Выбрасывается ли исключение из этого метода?   -  person mrzasa    schedule 16.02.2019
comment
Вы можете попробовать добавить строку raise ActiveRecord::RecordNotFound в начало метода и посмотреть, поймается ли она?   -  person Amin Shah Gilani    schedule 16.02.2019
comment
Вы можете улучшить свой вопрос, рассказав, где, когда и как происходит такое поведение.   -  person Sebastian Palma    schedule 16.02.2019
comment
Не могли бы вы попробовать raise ActiveRecord::RecordNotFound unless Cart.find(nil) ?   -  person zeitnot    schedule 16.02.2019
comment
@mrzasa Что происходит, выдается ошибка, и все останавливается, и веб-браузер жалуется на ошибку ActiveRecord::RecordNotFound. Из того, что я понимаю, предполагается, что спасение уловит эту ошибку так же, как блок try/catch в других языках, таких как Javascript.   -  person John    schedule 21.02.2019
comment
@UpvoteMe, вызывающий ошибку, вызывает ошибку и также не перехватывается спасением   -  person John    schedule 21.02.2019
comment
@SebastianPalma хорошо ... это в проекте rails, но я полный новичок и не знаю, как ответить .... но в этом случае проблема, похоже, связана с ошибкой синтаксиса, независимой от rails. спасение просто не поймать указанную ошибку.   -  person John    schedule 21.02.2019
comment
@zeitnot Да, и тот же результат. Вылетает ошибка и все умирает. Спасательный блок никогда не срабатывает.   -  person John    schedule 21.02.2019
comment
Проект, над которым я работаю, не входит в книгу Agile Web Development with Rails 5.1. Я внимательно следил за этим, и эта ошибка - просто странная вещь, на которую я не могу ответить сам. Мой коллега заставил меня установить другую версию ruby ​​​​через rbenv, и это, похоже, решило проблему. Но это все еще не объясняет, в чем была фактическая проблема. Я в растерянности, но я хотел бы поблагодарить всех за помощь :)   -  person John    schedule 21.02.2019
comment
Просто удалите ключевое слово ActiveRecord::RecordNotFound и оставьте ключевое слово rescue в покое.   -  person zeitnot    schedule 21.02.2019
comment
Это не рекомендуется @zeitnot.   -  person Sebastian Palma    schedule 22.02.2019
comment
@SebastianPalma Да, я знаю, но моей целью было просто отладить раздел спасения.   -  person zeitnot    schedule 22.02.2019


Ответы (1)


Установка другой версии Ruby через RBENV, кажется, решила проблему, я не могу сказать вам, почему это сработало, за исключением того, что код мог быть предназначен для определенной версии Ruby.

person John    schedule 21.02.2019