我正在我的Ruby应用程序中创建一个CSV下载,它有一些美元金额字段。这些字段的数据为cyrrency格式,如$ 35,456,当这些数据以CSV格式显示时,它会分成两个fiedls,逗号后的数据以CSV格式移动到下一列。
这是我的代码,用于呈现CSV
Sell Date, Sell Amount
- @rows.each do |row|
= "#{row[0]},#{number_to_currency(row[1], :precision => 2)}"
以下是用于返回CSV的操作
def fifolog
@rows = Report.fifolog()
respond_to do |format|
format.csv { render csv: {:rows =>@rows }}
end
end
我可以使用任何转义字符来逃避“,”在ruby中
感谢
答案 0 :(得分:11)
to_csv
方法。 如果您还没有这样做,则需要require 'csv'
。
Sell Date, Sell Amount
- @rows.each do |row|
= [ row[0], number_to_currency(row[1], :precision => 2) ].to_csv( row_sep: nil ).html_safe
to_csv
可以在Array
上找到,并且可以完成您期望的所有操作。
row_sep: nil
会阻止每行末尾的\n
,因为您已经使用each
执行此操作。没有它,尝试它,你会看到你得到一个额外的空白行。如果您只是生成一个CSV字符串,那么您需要让\n
分隔行。
html_safe
可阻止"
个字符显示在您的CSV文件中。
应该这样做!
JP
答案 1 :(得分:6)
在带逗号的值周围使用双引号:
"$35,456"
修改强>: 使用FasterCSV,更改以下行:
respond_to do |format|
format.csv { render csv: {:rows =>@rows }}
到
csv_data = FasterCSV.generate do |csv|
csv << ["Sell Date", "Sell Amount"]
@rows.each do |row|
csv << [row[0],number_to_currency(row[1], :precision => 2)]
end
end
send_data csv_data,
:type => 'text/csv',
:disposition => "attachment; filename=file.csv"