2010-11-27 30 views
1

J'ai une méthode appelée "révisions", et je veux pouvoir utiliser la même logique, mais la sortie à csv. Je pense que j'aimerais utiliser la gemme FasterCSV. Ce dont j'ai besoin, c'est de quoi ajouter à mes routes afin d'obtenir une route pour les sorties html et csv. Je voudrais que mes URL soient quelque chose comme ceci:Rails route pour non-ressource pour csv

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

Pensées?

Merci beaucoup!

Répondre

2

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

+0

Même avec le respond_to là-dedans, je reçois: Impossible de trouver WorkOrder avec ID = révisions –

+0

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

+0

J'ai cette route: –

0

Dans votre débandade es.rb:

 
resources :photos do 
    get 'preview', :on => :member 
end 

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

Et dans votre contrôleur, gérer le format avec un respond_to.

+0

Voici ce que je reçois, même avec cette route: Impossible de trouver la facture avec ID = révisions –

+0

Quelle est l'URL exacte que vous essayez de visiter? –

+0

/invoices/1/revisions.csv –