我正在尝试写入CSV,但我遇到了问题。我见过this所以我刚刚应用了解决方案,但是我收到了一个错误。 这是我的代码:
require 'csv'
data = Owner.find(2).cats
CSV.open("file.csv", "w") do |csv|
data.each do |cat|
csv << cat.name
end
end
我已经在控制台中检查过,我正在获取数据for Owner.find(2).cats
。
当我尝试将此内容写入CSV
时,我收到错误:
未定义的方法`map'为0:Fixnum
当我尝试来自同一question的简单解决方案时:
require 'csv'
CSV.open("file.csv", "w") do |csv|
csv << "\n"
end
我收到此错误:
“\ n”的未定义方法`map':String
你知道我做错了吗?
我是ruby的新手,所以也许我正在做一个roockie错误
答案 0 :(得分:2)
require 'csv'
data = Owner.find(2).cats
CSV.open("file.csv", "w") do |csv|
data.each { |cat| csv << [cat.name] }
end
答案 1 :(得分:2)
CSV是行的集合,每个行都是列的集合;它是一个二维数组,可以转换为文本形式。因此,顶级CSV
对象希望您向其追加数组,而不是单个单元格值。
请注意,在此代码中:
CSV.open('filename','w') do |csv|
do stuff
end
do stuff
只运行一次。由您来创建CSV的结构,通常是这样的:
CSV.open('filename','w') do |csv|
data.each |item|
row = [item.field1, item.field2, item.field3]
csv << row
end
end
甚至是双循环:
CSV.open('filename','w') do |csv|
data.each |item|
row = []
fields.each do |field|
row << item[field]
end
csv << row
end
end
举个例子:
$ irb
irb(main):001:0> require 'csv' #=> true
irb(main):002:0> CSV.open("cats.csv", "w") do |csv|
irb(main):003:1* csv << [ "cat1" ] << [ "cat2" ] << [ "cat3 " ]
irb(main):004:1> end
#=> <#CSV io_type:File io_path:"cats.csv" encoding:UTF-8 lineno:3 col_sep:"," row_sep:"\n" quote_char:"\"">
irb(main):005:0>
$ cat cats.csv
cat1
cat2
cat3
$
请注意,该文件中没有引号或方括号。