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

时间:2016-04-12 22:10:34

标签: ruby-on-rails arrays csv ruby-on-rails-4

在我的控制器中,我正在创建一个字符串数组。我想创建一个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"

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

2 个答案:

答案 0 :(得分:3)

由于@metrics是一个数组,因此您看起来根本不会调用模型上的任何代码,因此您的模型代码实际上并没有执行任何操作。

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

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

答案 1 :(得分:0)

这只是猜测,但尝试将library(ggplot2) ggplot(data.frame(x, y), aes(x, y)) + geom_point() + scale_y_continuous(breaks = c(min(y), max(y))) 格式化为数组:因此@metrics的每个元素都是它自己的数组。 @metrics似乎可以将数组视为一行,因此您需要一个数组数组来生成新行。

to_csv

<强>更新

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