不使用 FasterCSV 的另一种方法:
在 config/initializers/dependencies.rb 之类的初始化文件中需要 ruby 的 csv 库
require "csv"
作为一些背景,以下代码基于Ryan Bate 的创建搜索资源的高级搜索表单。在我的例子中,搜索资源的 show 方法将返回之前保存的搜索结果。它还响应 csv,并使用视图模板来格式化所需的输出。
def show
@advertiser_search = AdvertiserSearch.find(params[:id])
@advertisers = @advertiser_search.search(params[:page])
respond_to do |format|
format.html # show.html.erb
format.csv # show.csv.erb
end
end
show.csv.erb 文件如下所示:
<%- headers = ["Id", "Name", "Account Number", "Publisher", "Product Name", "Status"] -%>
<%= CSV.generate_line headers %>
<%- @advertiser_search.advertisers.each do |advertiser| -%>
<%- advertiser.subscriptions.each do |subscription| -%>
<%- row = [ advertiser.id,
advertiser.name,
advertiser.external_id,
advertiser.publisher.name,
publisher_product_name(subscription),
subscription.state ] -%>
<%= CSV.generate_line row %>
<%- end -%>
<%- end -%>
在报告页面的 html 版本上,我有一个链接可以导出用户正在查看的报告。以下是返回报告的 csv 版本的 link_to:
<%= link_to "Export Report", formatted_advertiser_search_path(@advertiser_search, :csv) %>