2016-07-28 51 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 -%> 

這奏效了。呼!

不過,如果有人有其他解決方案,我想聽聽他們。