我在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 -%>
當我建立了這一點,一切都工作得很好,直到我到達表格的最後一列「報告類型」。下面是當被添加會發生什麼:
注意,第一個項目是如何擁有HTML "
開頭和結尾?但下一個不?第一個如何分佈在其他無標題列中?以及最後一個沒有"
,但中間有&
(當然是&符號)?
所有這些值都以文本形式存儲在ReportType表中,它們在Rails中以字符串的形式出現,據我所知,它們的數據類型在任何地方都沒有什麼不同,但它們的行爲不同從桌子上拉出來。
如果我將「報告類型」從出口中取出,請查看我的表有多可愛?
沒有跳過的行或任何東西!
在我看來,這些HTML字符 - 特別是前導和尾隨雙引號 - 至少在這裏引起了一些麻煩。我嘗試使用.gsub('"', '')
刪除它們,但這不起作用。
有沒有人遇到過這個或有任何見解?
我認爲你的CSV文件是從ERB打開HTML轉義出來的。你確定源數據中沒有這樣的東西嗎? – tadman
@tadman嗯...不是我所知道的 - 我對Rails有點新 - 我在哪裏查看? – skwidbreth
@tadman - 謝謝你,你幫我弄清楚了 - 看下面。 – skwidbreth