2010-11-27 2 views
1

Ich habe eine Methode namens "Revisionen", und ich möchte in der Lage sein, die gleiche Logik verwenden, aber Ausgabe an CSV. Ich denke, ich möchte das FasterCSV-Juwel verwenden. Was ich brauche, ist, was ich meinen Routen hinzufügen muss, um eine Route für die HTML- und die CSV-Ausgaben zu erhalten. Ich möchte, dass meine URLs in etwa so aussehen:Schienen Route für Non-Ressource für CSV

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

Gedanken?

Vielen Dank!

Antwort

2

Schienen macht dies sehr einfach. Sie müssen Ihre Routen überhaupt nicht ändern, um CSV-Format zu berücksichtigen, da Rails den Csv-MIME-Typ erkennt.

zunächst eine Route in routes.rb einzurichten:

map.invoice_revisions 'invoices/:id/revisions.:format', 
         :controller=>:invoices, 
         :action=>:revisions 

In Ihrem Controller, etwas tun, wie folgt aus:

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 

Hier ist ein Tutorial mit detaillierteren Informationen über die Formatierung der CSV-Dateien mit csvbuilder:

http://rubyglasses.blogspot.com/2009/07/csv-views-with-fastercsv-and-csvbuilder.html

+0

Sogar mit der Antwort_to dort, ich bekomme: WorkOrder mit ID = Revisionen nicht gefunden –

+0

Schauen Sie sich noch einmal die aktualisierte Antwort. Ich habe einige Informationen zur Einrichtung Ihrer Routen hinzugefügt. Ich nahm an, dass Sie bereits eine Route für die HTML-Version der Ansicht eingerichtet hatten. – bowsersenior

+0

Ich habe diese Route: –

0

In Ihrem Router es.rb:

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

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

Und in Ihrem Controller, handhaben das Format mit einem respond_to.

+0

Hier ist, was ich bekomme, auch mit dieser Route: Konnte Rechnung mit ID = Revisionen nicht finden –

+0

Was ist die genaue URL, die Sie besuchen möchten? –

+0

/Rechnungen/1/revisions.csv –