我有一个名为“修订”的方法,我希望能够使用相同的逻辑但输出到 csv。我想我想使用 FasterCSV gem。我需要的是添加到我的路线中以便获得 html 和 csv 输出的路线。我希望我的网址是这样的:
invoices/51/revisions
invoices/51/revisions.csv
想法?
非常感谢!
我有一个名为“修订”的方法,我希望能够使用相同的逻辑但输出到 csv。我想我想使用 FasterCSV gem。我需要的是添加到我的路线中以便获得 html 和 csv 输出的路线。我希望我的网址是这样的:
invoices/51/revisions
invoices/51/revisions.csv
想法?
非常感谢!
Rails 使这变得非常容易。您根本不需要更改路线以适应 CSV 格式,因为 rails 可以识别 csv MIME 类型。
首先,在 routes.rb 中设置路由:
map.invoice_revisions 'invoices/:id/revisions.:format',
:controller=>:invoices,
:action=>:revisions
在您的控制器中,执行以下操作:
def revisions
# ... set @revisions with something like
@revisions = Invoice.find(params[:id]).revisions
respond_to do |format|
format.html # will render the revisions html template
format.csv { render :csv => revisions_csv } # see sample method below
end
end
end
private
def revisions_csv # convert @revisions to csv: customize to your needs
FasterCSV.generate do |csv|
csv << @revisions.first.attributes.keys # set the headers
@revisions.each do |revision| # set the data
csv << revision.attributes.values
end
end
end
这是一个教程,其中包含有关使用 csvbuilder 格式化 csv 文件的更详细信息:
http://rubyglasses.blogspot.com/2009/07/csv-views-with-fastercsv-and-csvbuilder.html
在您的 routes.rb 中:
资源:照片做 获取“预览”,:on =>:member 结尾
http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
在您的控制器中,使用 respond_to 处理格式。