【问题标题】:rails respond_to in controller rescue block控制器救援块中的 rails respond_to
【发布时间】:2017-11-08 14:48:46
【问题描述】:

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 json 上传或使用 UI 手动上传的 API 控制器。

【问题讨论】:

  • 啊...在我的特殊情况下,这只是由于其他地方的错误而无法正常工作,文件的上传需要在视图= form_tag({action: :create, format: 'html'}, multipart: true) do 中,因为我特别需要添加格式为html

标签: ruby-on-rails rescue respond-to


【解决方案1】:

为了更好的可读性,请改用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

我认为它会起作用。

【讨论】:

    【解决方案2】:

    救援块不应该受到指责。如果您的 routes.rb 使用如下选项指定,则会发生这种情况:

    resources :widgets, defaults: {format: :the_spanish_inquisition}
    

    【讨论】:

      猜你喜欢
      • 2023-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2012-02-26
      相关资源
      最近更新 更多