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, чтобы определить формат запроса.

Другие вопросы по тегам