Я столкнулся с этой же проблемой сегодня вечером. Ошибка генерируется до того, как ApplicationController начинает обрабатывать запрос, поэтому перехват его в ApplicationController не будет работать, потому что уже слишком поздно.
Вам нужно вставить часть связующего ПО , которое перехватывает ActionController :: BadRequest перед промежуточным ПО ActionDispatch :: ParamsParser, которое выдает ошибку.
Пример, который ловит ошибку, добавляет ее в журнал и затем возвращает страницу в виде простого текста 400.
# app/middleware/catch_batch_request_error_mw.rb
class CatchBadRequestErrorMw
def initialize(app)
@app = app
end
def call(env)
begin
@app.call(env)
rescue ActionController::BadRequest => e
Rails.logger.error("CatchBadRequestErrorMw: #{e.message}")
return [
400,
{
'Content-Type': 'text/plain',
},
['Bad Request']
]
end
end
end
А затем в Application.rb
config.middleware.insert_before(ActionDispatch::ParamsParser, CatchBadRequestErrorMw)
Я должен обратите внимание, что примеры здесь взяты из приложения Rails 4.2, поэтому, если у вас возникнут какие-либо проблемы, я бы начал с них.