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