So erzeugen Sie eine CSV-Datei in Aktion?
Ich versuche zu generieren, die eine CSV-Ausgabe mit Daten aus meiner Datenbank. Ich würde gerne diese Daten an eine Dritte Partei, so dass ich das Bild, das ich jemandem geben würden, der eine URL (website.com/api_data/cars
) und durch den Zugriff auf diese URL, mit der die person in der Lage sein würde, mit ihm zu arbeiten - ich glaube, ich möchte den Zugriff auf die URL und dann zu sehen gibt (in die Aktion) Daten angezeigt und getrennt durch ,
oder ;
.
Aber wie macht man das?
So weit, ich bin versucht, folgenden Ansatz:
csv_string = CSV.generate do |csv|
cols = ["column one", "column two", "column three"]
csv << cols
csv << ["A", "B", "C"]
@filename = "data-#{Time.now.to_date.to_s}.csv"
end
send_data(csv_string, :type => 'text/csv; charset=utf-8; header=present', :filename => @filename)
Dies ist in der Steuerung generate_data und Aktion csv_cars.
Wenn ich diese Aktion (webste.com/generate_data/csv_cars), wird es automatisch ein pop-up-Fenster, um die Datei herunterzuladen.
Aber, wie Sie schreiben, die CSV-Inhalte der Aktion? Also, wenn ich öffnen Sie die URL, ich werde sehen, es geschrieben, der Inhalt aus der Datenbank?
render
es als text. Look dieser Edelstein, ich benutze es in der gleichen Falle.Aber sollte ich das schreiben dann etwas um die csv_cars - Datei? Auch, sollte ich das
send_data
Bau? (Btw, danke für die prompte Antwort)send_data - Sendet die angegebene binäre Daten an den browser. Diese Methode ist ähnlich wie render :text => Daten, sondern Sie können auch angeben, ob der browser anzeigen soll, die Antwort als Datei-Anhang (z.B. in einem download-dialog) oder als inline-Daten. Sie können auch die Art des Inhalts, die scheinbare Datei-name und andere Dinge.
InformationsquelleAutor user984621 | 2015-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß, dies ist ein Alter thread, aber ich stieß in meiner Suche, also falls jemand anderes macht das gleiche, hier ist meine Antwort, und was für mich gearbeitet.
Ich denke, bhanu hatte eine gute Möglichkeit, die über Sie gehen, aber ich habe etwas ändern. Anstatt das zu tun, @Autos innerhalb des respond_to, die ich gerade genannt send_data Autos.to_csv da, als Rob sagte, es war eine Klasse Methode. Es funktionierte wunderbar für mich.
Und dann in den controller
Ich verstehe, dass dies aufgerufen wird, wenn Sie gehen, um Autos/index, aber Sie können diese in jeder Methode, if-Anweisung oder alles, was Sie wollen und haben es genannt, wenn Sie möchten, von dort aus. Können Sie auch Argumente, wie ich oben mit machen und Abfragen für bestimmte Felder. Es war auf jeden Fall viel einfacher, als ich dachte, es würde. Hoffe, das half jemand.
InformationsquelleAutor nmrichards
definieren to_csv Methode in Ihrem Modell, wie unten gezeigt
Später im controller
stellt einen aktiven Datensatz die Beziehung, die reagiert, um eine Klasse von Methoden, die nicht Instanz
Wie kann ich diesen Prozess verzögern job?
InformationsquelleAutor bhanu