Rails:处理 respond_to 块内的错误 (csv)

Rails: handling errors within respond_to block (csv)

我的控制器上有一个搜索方法可以响应 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 文件来处理这种情况,但这似乎是我目前的最佳选择。感谢您的帮助!

您需要将 content-type header 设置为 text/html 而不是 text/csv

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

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