2016-07-28 62 views
0

我在Rails应用中遇到了一个问题,其中表格数据的.csv导出格式不正确。Rails - .csv导出的格式化字符串不正确

首先,这里是产生该.csv出口代码...

report_controller.erb

class Admin::ReportController < ApplicationController 

    def index 
     @report = Report.all 

     respond_to do |format| 
      format.html 
      format.csv do 
       headers['Content-Disposition'] = "attachment; 
       filename=\"report-summary.csv\"" 
       headers['Content-Type'] ||= 'text/csv' 
      end 
     end 
    end 

end 

index.csv.erb

<%- headers = ["Report Id", "Datetime", "Latitude", "Longitude", "Report Type"] -%> 
<%= CSV.generate_line headers -%> 
<%- @report.each do |report| -%> 
    <%- row = [report.id, report.datetime, report.latitude, report.longitude, report.report_type.report_type] -%> 
    <%= CSV.generate_line row -%> 
<%- end -%> 

当我建立了这一点,一切都工作得很好,直到我到达表格的最后一列“报告类型”。下面是当被添加会发生什么:

Problem table

注意,第一个项目是如何拥有HTML &quot;开头和结尾?但下一个不?第一个如何分布在其他无标题列中?以及最后一个没有&quot;,但中间有&amp(当然是&符号)?

所有这些值都以文本形式存储在ReportType表中,它们在Rails中以字符串的形式出现,据我所知,它们的数据类型在任何地方都没有什么不同,但它们的行为不同从桌子上拉出来。

如果我将“报告类型”从出口中取出,请查看我的表有多可爱?

Good table

没有跳过的行或任何东西!

在我看来,这些HTML字符 - 特别是前导和尾随双引号 - 至少在这里引起了一些麻烦。我尝试使用.gsub('"', '')删除它们,但这不起作用。

有没有人遇到过这个或有任何见解?

+0

我认为你的CSV文件是从ERB打开HTML转义出来的。你确定源数据中没有这样的东西吗? – tadman

+0

@tadman嗯...不是我所知道的 - 我对Rails有点新 - 我在哪里查看? – skwidbreth

+0

@tadman - 谢谢你,你帮我弄清楚了 - 看下面。 – skwidbreth

回答

0

感谢@tadman查找有关此指着我在正确的方向 - 我改变这一行:通过添加raw像这样

<%= CSV.generate_line row -%> 

<%=raw CSV.generate_line row -%> 

这奏效了。呼!

不过,如果有人有其他解决方案,我想听听他们。