我可以将表格数据导出为CSV文件,但每条记录后面都有一个空白行。为什么以及如何解决它?
index.html.erb中的
<%= link_to "Export to csv", request.parameters.merge({:format => :csv})%>
在index.csv.erb
中<%- headers = ["Id", "Name"] -%>
<%= CSV.generate_line headers %>
<%- @customers.each do |n| -%>
<%- row = [ n.id, n.fname ] -%>
<%= CSV.generate_line row %>
<%- end -%>
答案 0 :(得分:9)
CSV.generate_line
在它生成的行的末尾添加了一个换行符,但<%= %>
也是如此,所以你得到两行。
要从erb
表达式输出中取消换行符,请使用以下语法:<%= -%>
这样:
<%- headers = ["Id", "Name"] -%>
<%= CSV.generate_line headers -%>
<%- @customers.each do |n| -%>
<%- row = [ n.id, n.fname ] -%>
<%= CSV.generate_line row -%>
<%- end -%>
接受的答案留在erb
生成的新行中但是会抑制来自CSV.generate_line
的新行,我认为这不是最好的方法。
答案 1 :(得分:6)
这就是修复它的原因。
<%= CSV.generate_line row, :row_sep => ?\t, :quote_char => ?\ %>
答案 2 :(得分:2)
对于我使用strip和html_safe工作后,在生成行后应用:
<%- headers = ["Id", "Tour No"] -%>
<%= CSV.generate_line(headers).strip%>
<%- @tours.each do |t| -%>
<%- row = [ t.id,t.tour_no] -%>
<%= CSV.generate_line(row).html_safe.strip%>
<%- end -%>
答案 3 :(得分:0)
试试这个:
row = [ n.id, n.fname.strip ]
strip会删除\ r和/或\ n,这可能会导致空行。我没有任何其他解释你的源代码是好的!
答案 4 :(得分:0)
我以为我会用我的解决方案来解决这个问题。
基本上在我的本地机器(Mac)上,一切都运行得很好,然后当我将我的应用程序部署到heroku时,它会开始添加这些神秘的新行。
对我来说,解决方案是使用:
CSV.generate_line(row, row_step: ?\r).html_safe
请注意,我使用的是rails 4.1.6。
希望能帮助其他人挣扎