1

我有一个名为“修订”的方法,我希望能够使用相同的逻辑但输出到 csv。我想我想使用 FasterCSV gem。我需要的是添加到我的路线中以便获得 html 和 csv 输出的路线。我希望我的网址是这样的:

invoices/51/revisions
invoices/51/revisions.csv

想法?

非常感谢!

4

2 回答 2

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

于 2010-11-27T08:27:00.207 回答
0

在您的 routes.rb 中:

资源:照片做
  获取“预览”,:on =>:member
结尾

http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

在您的控制器中,使用 respond_to 处理格式。

于 2010-11-27T11:40:35.833 回答