1

「リビジョン」というメソッドがあり、同じロジックを使用して csv に出力できるようにしたいと考えています。FasterCSV gem を使用したいと思います。必要なのは、html と csv の両方の出力のルートを取得するためにルートに追加するものです。URLを次のようにしたいと思います:

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

考え?

どうもありがとう!

4

2 に答える 2

2

Rails はこれを非常に簡単にします。Rails は csv MIME タイプを認識するため、CSV 形式に対応するためにルートを変更する必要はまったくありません。

まず、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 で:

リソース :写真は
  get 'preview', :on => :member
終わり

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

そしてコントローラーで、respond_to でフォーマットを処理します。

于 2010-11-27T11:40:35.833 に答える