2011-07-15 2 views
3

J'utilise FasterCSV pour produire la sortie CSV de mes rapports dans une application Rails 3. Voici un extrait de code:Comment empêcher Rails d'encoder des entités dans la sortie FasterCSV?

<%= FasterCSV.generate do |csv| 
    @groups.each do |b| 
    record = [ b.group, b.organization_name, b.status, b.comments ] 
    csv << record 
    end 
end 
%> 

Lorsque FasterCSV comprend une chaîne vide, il utilise une paire de guillemets doubles vides.

Malheureusement, Rails 3 est en train de coder ces guillemets en tant qu'entités, ce qui ne fonctionne pas très bien avec Excel. Voici ce que ma sortie CSV ressemble (quand b.comments est nul ou une chaîne vide):

Rafeland,Rafe Organization,Submitted,&quot;&quot; 

Quelle est la méthode généralement acceptée pour empêcher Rails de coder ces entités? Je connais la méthode «brute», mais elle ne prend pas un bloc dans lequel je peux mettre la génération CSV.

Répondre

5

Je vous recommande de générer un fichier (peut-être simplement un Tempfile) et de le servir, mais si vous voulez continuer à le faire, vous devez indiquer à Rails que le fichier CSV entier est compatible html. En supposant FasterCSV.generate retourne une chaîne normale, puis simplement virer de bord sur .html_safe comme ceci:

<%= FasterCSV.generate do |csv| 
    ... 
end.html_safe 
%> 
+0

Je ne savais pas que vous pourriez prendre un appel de méthode sur l'extrémité d'un bloc comme ça. Ruby est cool. – Rafe

+0

Je ne le savais pas non plus. Woohoo! –

Questions connexes