在我的控制器中,我正在创建一个字符串数组。我想创建一个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"
有关如何正确处理此问题的任何想法?提前谢谢。
答案 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在他的回答中正确地说了这个。 (虽然我怀疑我的答案也会奏效)。