Je suivais cette vidéo railscast mais j'ai de sérieuses difficultés pour exporter mes données vers Excel (ou CSV pour cette question).Exportation au format CSV à partir d'une requête de rails complexes
J'utilise will_paginate dans certaines données que je montre sur frontend comme ceci:
sql = "select complex..."
@data = paginate_by_sql([sql],
:per_page => params[:rows],
:page => params[:page])
donc, tel quel, je pensais que cela devrait fonctionner:
respond_to do |format|
format.html
format.xls { send_data @data.to_csv(:col_sep => "\t") }
end
et effectivement téléchargé un fichier xls correctement par le contenu est tout foiré, il montre une ligne par colonne et quelque chose comme ça comme contenu:
#<Product:0x00000004c83328>
PS -> en utilisant des rails dernière version
:: EDIT :: par une ligne par colonne je veux dire une seule ligne sur ma feuille Excel et sur cette ligne
COLONNE A = #<Product:0x00000004c83328>
cOLONNE B = #<Product:0x00000004c83329>
cOLONNE C = #<Product:0x00000004c8333>
(30 colonnes)
UPDATE
a fait un exercice simple pour tester et mettre fin avec toutes les colonnes à nouveau dans une seule colonne:
csv_string = CSV.generate(:col_sep => ",") do |csv|
csv << ["row", "of", "CSV", "data"]
csv << ["another", "row"]
end
respond_to do |format|
format.html
format.csv { send_data csv_string,
:type => 'text/csv; charset=iso-8859-1; header=present',
:disposition => "attachment; filename=records.csv" }
end
(:col_sep => ",")
est facultative, je suppose.
Résultat:
Je suis désolé, je ne comprenais pas ce que vous entendez par me appeler un 'to_s' ... Je suis juste appeler' paginate_by_sql'. Bien que je réalise que la sortie ressemble à un modèle converti en chaîne ... c'est bizarre. Je dois être proche ... – tostasqb
Oui, si vous appelez to_s sur un modèle, comme 'Person', vous obtiendrez des résultats comme' # '. Quelle est la conversion de chaîne par défaut pour un modèle ActiveRecord. Donc, je vous suggère de remplacer cette méthode dans votre modèle en définissant une nouvelle méthode 'to_s'. –
ipd