「リビジョン」というメソッドがあり、同じロジックを使用して csv に出力できるようにしたいと考えています。FasterCSV gem を使用したいと思います。必要なのは、html と csv の両方の出力のルートを取得するためにルートに追加するものです。URLを次のようにしたいと思います:
invoices/51/revisions
invoices/51/revisions.csv
考え?
どうもありがとう!
「リビジョン」というメソッドがあり、同じロジックを使用して csv に出力できるようにしたいと考えています。FasterCSV gem を使用したいと思います。必要なのは、html と csv の両方の出力のルートを取得するためにルートに追加するものです。URLを次のようにしたいと思います:
invoices/51/revisions
invoices/51/revisions.csv
考え?
どうもありがとう!
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
あなたの routes.rb で:
リソース :写真は get 'preview', :on => :member 終わり
http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
そしてコントローラーで、respond_to でフォーマットを処理します。