Rafe
Rafe

Reputation: 3066

How to prevent Rails from encoding entities in FasterCSV output

I'm using FasterCSV to produce CSV output of my reports in a Rails 3 application. Here's a code snippet:

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

When FasterCSV includes an empty string, it uses a pair of empty double quotes.

Unfortunately, Rails 3 is encoding those quotation marks as entities, which doesn't work very well with Excel. Here's what my CSV output looks like (when b.comments is nil or an empty string):

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

What's the generally accepted method for preventing Rails from encoding those entities? I know about the raw method, but it doesn't take a block that I can put the CSV generation into.

Upvotes: 3

Views: 586

Answers (1)

Jeremy Weathers
Jeremy Weathers

Reputation: 2554

I would recommend generating a file (perhaps merely a Tempfile) and serving that, but if you want to continue doing it your way, then you need to tell Rails that the entire CSV is HTML-safe. Assuming FasterCSV.generate returns a normal String, then simply tack on html_safe:

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

Upvotes: 5

Related Questions