Rails:send_data(csv)将对象id放在csv文件而不是csv info中

时间:2017-06-19 23:09:53

标签: ruby-on-rails ruby csv

我在rails控制器中有一个块,如下所示:

CSV.generate do |csv|
  csv << ["Name", "Other Field"]
  csv << [@app.name, @app.other_field]
  send_data csv, filename: 'test.csv'
end

但是下载文件的内容就是这样:

#<CSV:0x007fe518414bc8>

我做错了什么?

1 个答案:

答案 0 :(得分:3)

CSV.generate返回生成的CSV字符串,例如:

str = CSV.generate { |csv| csv << %w[a b c]; csv << [1,2,3] }
puts str

给你:

a,b,c
1,2,3

作为输出。

您正在将CSV实例传递给send_data,它正试图将该CSV实例转换为字符串,显然是在其上调用to_s。< / p>

你想说更像这样的事情:

csv_string = CSV.generate do |csv|
  csv << ["Name", "Other Field"]
  csv << [@app.name, @app.other_field]
end
send_data csv_string, filename: 'test.csv'