rails response_to в блоке спасения контроллера
respond_to
не работает внутри блока спасения контроллера:
def create
respond_to do | format |
format.json { render json: SomeManager.new(some_params).json }
format.html do
SomeManager.new(some_params)
render :new, notice: 'it worked'
end
end
rescue => e
respond_to do | format |
format.json { render json: {error: 'did not work because reasons'}.to_json, status: :forbidden }
format.html { render :new, alert: 'did not work because reasons' }
end
end
^ Контроллер для API, который может реагировать на загрузку API json или загрузку вручную с помощью пользовательского интерфейса.
3 ответа
Для лучшей читаемости используйте begin
.. rescue
как это вместо этого:
def create
respond_to do | format |
begin
format.json { render json: SomeManager.new(some_params).json }
format.html do
SomeManager.new(some_params)
render :new, notice: 'it worked'
end
rescue => e
format.json { render json: {error: 'did not work because reasons'}.to_json, status: :forbidden }
format.html { render :new, alert: 'did not work because reasons' }
end
end
end
Я думаю, что это будет работать.
Спасательный блок не виноват. Это произойдет, если ваш routes.rb
указывается с опцией вроде так:
resources :widgets, defaults: {format: :the_spanish_inquisition}
У меня такая же проблема. Мне пришлось использовать request.format, чтобы определить формат запроса.