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 или ручную загрузку с использованием пользовательского интерфейса.


person xxjjnn    schedule 07.06.2017    source источник
comment
ах ... в моем конкретном случае это не работало только из-за ошибки в другом месте, загрузка файла должна была быть в представлении = form_tag({action: :create, format: 'html'}, multipart: true) do, в котором мне специально нужно было добавить, что формат html   -  person xxjjnn    schedule 07.06.2017


Ответы (2)


Для лучшей читабельности используйте вместо этого 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

Я думаю, это сработает.

person Ahmed Samir Shahin    schedule 07.06.2017

Спасательный блок не виноват. Это произойдет, если ваш routes.rb указан с такой опцией:

resources :widgets, defaults: {format: :the_spanish_inquisition}
person jimworm    schedule 07.06.2017