我有一个名为“revisions”的方法,我希望能够使用相同的逻辑但输出到csv。我想我想使用FasterCSV宝石。我需要的是添加到我的路由中以便为html和csv输出获取路由。我希望我的网址是这样的:
invoices/51/revisions
invoices/51/revisions.csv
思想?
非常感谢!
答案 0 :(得分:2)
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
答案 1 :(得分:0)
在您的routes.rb中:
resources :photos do get 'preview', :on => :member end
http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
在您的控制器中,使用respond_to处理格式。