Mongoid::Errors::DocumentNotFound возникает даже после спасения
У меня есть контроллер Rails с этим методом, который запускается как before_action:
def authenticate_user
Knock::AuthToken.new(token: token).entity_for(User)
rescue Mongoid::Errors::DocumentNotFound
render nothing: true, status: 401
end
Несмотря на то, что я могу убедиться, что это спасает ошибку (точка прерывания byebug срабатывает в соответствии с оператором спасения), ее все же удается вызвать сразу же после:
Mongoid::Errors::DocumentNotFound (
message:
Document(s) not found for class User with id(s) 1.
summary:
When calling User.find with an id or array of ids, each parameter must match a document in the database or this error will be raised. The search was for the id(s): 1 ... (1 total) and the following ids were not found: 1.
resolution:
Search for an id that is in the database or set the Mongoid.raise_not_found_error configuration option to false, which will cause a nil to be returned instead of raising this error when searching for a single id, or only the matched documents when searching for multiples.):
app/controllers/api/base_controller.rb:12:in `authenticate_user'
Я много лет использовал ключевое слово rescue в Ruby и никогда не сталкивался с этим.
Что я бегу:
- Ruby 2.5
- Рельсы 5.2
- Mongoid 7.0.1
Почему ошибка возникает, даже когда я ее спасаю, и как я могу предотвратить возникновение ошибки?
1 ответ
Я не уверен, почему он поднимается, даже когда вы его спасаете, но я отвечу на часть "как предотвратить это".
В вашем mongoid.yml
нужно установить
raise_not_found_error: false
См. Этот раздел в документации Mongoid для примера.