Rails rend cela très facile. Vous n'avez pas du tout besoin de modifier vos itinéraires pour prendre en charge le format CSV, car les rails reconnaissent le type MIME csv.
Tout d'abord, mettre en place un itinéraire dans routes.rb:
map.invoice_revisions 'invoices/:id/revisions.:format',
:controller=>:invoices,
:action=>:revisions
Dans votre contrôleur, faire quelque chose comme ceci:
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
Voici un tutoriel avec des informations plus détaillées sur le formatage des fichiers csv en utilisant csvbuilder:
http://rubyglasses.blogspot.com/2009/07/csv-views-with-fastercsv-and-csvbuilder.html
Même avec le respond_to là-dedans, je reçois: Impossible de trouver WorkOrder avec ID = révisions –
Regardez à nouveau la réponse mise à jour. J'ai ajouté quelques informations sur la configuration de vos itinéraires. J'ai supposé que vous aviez déjà un itinéraire mis en place pour la version html de la vue. – bowsersenior
J'ai cette route: –