2017-02-22 84 views
1

Я спасаю несанкционированное исключение и хочу сделать предупреждение в этом блоке аварийного восстановления. Поскольку это в моем контроллере приложений, это спасение может быть удалено в нескольких форматах, поэтому мне нужен блок respond_to.Оповещение об исключении извещения в rescue_from using response_to

Если я делаю это без respond_to, все работает нормально. Статус установлен на 401, и я вижу, что сообщение об исключении исключительных ситуаций мигает.

render :json => exception.message, :status => 401 

Однако, если я делаю то же самое внутри repond_to блока, ничего не работает. Статус не устанавливается, и сообщение об исключении не отображается.

respond_to do |format| 
    format.json { render :json => exception.message, :status => 401 } 
end 

В чем проблема? Я просмотрел массу примеров, и кажется, что он должен работать, но статус и сообщение, похоже, игнорируются.

+0

В первом варианте вы оказываете ответ на все запросы к действию контроллера, несмотря на то, что их формат. Второй вариант определяет ответ только для запросов формата json, например. '/ Пример/new.json'. Если вы сделаете запрос к вашему действию, например, этот '/ example/new', он вернется в html-формат, для которого вы не определяете статус и сообщение. См. Этот вопрос и ответ для получения дополнительной информации: http://stackoverflow.com/questions/9492362/rails-how-does-the-respond-to-block-work –

ответ

0

Кроме того, вы рендеринга с JSON

render :json => exception.message, :status => 401 

Вы отвечаете на HTML запросов ... Так что, если вам нужно, чтобы сделать его в браузерах, вам нужно обрабатывать все форматировать себя ...

respond_to do |format| 
    format.json { ... } 
    format.html { ... } 
end 
+0

Я имею в виду ... так, как вы спрашиваете, я думаю у вас только проблемы с тестированием в браузере ... если не ударить конечную точку с форматом '.json' в конце ... например'/controller/action.json' – cefigueiredo