繁体   English   中英

从Rails 4应用程序中的字符串数组生成CSV

[英]Generate CSV from array of strings in Rails 4 application

在我的控制器中,我正在创建一个字符串数组。 我想创建一个CSV,它只是在一个新行上包含数组的每个元素。 它们已经是以逗号分隔的字符串。

我一直在尝试使用我的控制器中的代码创建CSV文件:

#controller
@metrics = ["Group Name,1", "25", "44,2,5"]
respond_to do |format|
  format.html
  format.csv { send_data @metrics.to_csv, filename: "output.csv" }
end

这个代码在我的模型中:

#model
def self.to_csv(options = {})
  CSV.generate(options) do |csv|
    all.each do |row|
      csv << row.attributes.values
    end
  end
end

但是,这会输出到我的CSV文件,而不会分隔行。

"Group Name,1", "25", "44,2,5" 

我想看到的输出很简单:

"Group Name,1"
"25"
"44,2,5"

有关如何正确处理这个问题的任何想法? 提前致谢。

由于@metrics是一个数组,所以看起来你根本不会调用模型上的任何代码,因此你的模型代码实际上并没有做任何事情。

此代码您的控制器将生成您正在寻找的输出:

CSV.generate do |csv| 
  @metrics.each { |item| csv << [item] }
end

这只是猜测,但尝试将@metrics格式化为数组数组:因此@metrics每个元素都是它自己的数组。 似乎to_csv将数组视为一行,因此您需要一个数组数组来生成新行。

[["Group Name,1"], ["25"], ["44,2,5"]]

UPDATE

再看一下你的代码, @model不是任何模型的实例。 它只是一个数组。 当您调用to_csv时,它不会读取模型中引用的任何方法。 我猜测ruby内置的Array对象有一个被调用的to_csv方法,并解释了为什么你没有收到任何错误。 @Anthony E在他的回答中正确地说了这个。 (虽然我怀疑我的答案也会奏效)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM