如何操作ruby中的CSV对象?

时间:2017-10-23 16:25:15

标签: ruby-on-rails ruby csv

我想以CSV格式导出一些ActiveRecords。在检查了一些教程后,我发现了这个:

def export_as_csv(equipments)
  attributes = %w[id title description category_id]
  CSV.generate(headers: true) do |csv|
  csv << attributes
    equipments.each do |equipment|
      csv << equipment.attributes.values_at(*attributes)
    end
    return csv
  end
end

问题是,我想在我的测试中操作内存中的所有内容(即我不想将文件保存在磁盘中)。那么,当我收到这个csv对象作为返回值时,我如何遍历行和列?我来自Python,所以我尝试了:

csv = exporter.export_as_csv(equipments)
for row in csv:
  foo(row)
但是显然没有用。此外,设备肯定不是零。

2 个答案:

答案 0 :(得分:0)

CSV.generate返回根据csv规则格式化的字符串。  所以最明显的方法是解析它并迭代,如:

csv = exporter.expor_as_csv(equipments)
CSV.parse(csv).each do |line|
  # line => ['a', 'b', 'c']
end

答案 1 :(得分:0)

在一些视频之后,我发现return是问题所在。返回CSV我收到的是CSV对象,而不是CSV本身。