Rails:在respond_to块(csv)中处理错误

时间:2016-12-13 22:26:53

标签: ruby-on-rails ruby-on-rails-3

我的控制器上有一个搜索方法,可以响应html或CSV格式。 html格式按预期呈现搜索结果,我希望通过下载结果的CSV文件来使用CSV格式。

大多数情况下,会调用send_data并生成CSV文件。但是,在某些情况下,我想要生成CSV,而是显示错误(例如,当用户使用了本月所有分配的导出时)。以下代码是我喜欢的简化版本,但是这似乎并不像我试图处理错误的方式。

    respond_to do |format|
      format.html do
         @results = ...
         render "index"
      end

      format.csv do
        @results = ...

        if user_can_export?(@results)
          send_data generate_csv(@results), filename: "Search-Results.csv"
        else
          flash[:error] = "Unable to export search results."
          render "index"
        end
      end
    end

有没有办法让我突破这个块并呈现HTML或者我在这里生成一个csv文件?我不喜欢通过发送包含错误消息的csv文件来处理这种情况,但这似乎是我目前最好的选择。感谢帮助!

1 个答案:

答案 0 :(得分:1)

您需要将内容类型标头设置为text/html而不是text/csv

render template: "things/index.html.erb", content_type: "text/html"

此外,如果您想在当前请求周期中显示Flash消息,则需要使用flash.now[:error] = "Unable to export search results"