Ruby on rails 写入CSV返回:未定义的方法“map';至于\";或;0“;

Ruby on rails 写入CSV返回:未定义的方法“map';至于\";或;0“;,ruby-on-rails,ruby,csv,Ruby On Rails,Ruby,Csv,我正在尝试写入CSV,但遇到了一个问题。我已经看到了,所以我刚刚应用了解决方案,但我得到了一个错误。 这是我的代码: require 'csv' data = Owner.find(2).cats CSV.open("file.csv", "w") do |csv| data.each do |cat| csv << cat.name end end 我得到这个错误: “\n”的未定义方法“map”:字符串 你知道我做错了什么吗 我是ruby新手,所以我可能犯了r

我正在尝试写入CSV,但遇到了一个问题。我已经看到了,所以我刚刚应用了解决方案,但我得到了一个错误。 这是我的代码:

require 'csv'

data = Owner.find(2).cats
CSV.open("file.csv", "w") do |csv|
  data.each do |cat|
    csv << cat.name
  end
end
我得到这个错误:

“\n”的未定义方法“map”:字符串

你知道我做错了什么吗

我是ruby新手,所以我可能犯了roockie的一个错误

需要“csv”
require 'csv'

data = Owner.find(2).cats
CSV.open("file.csv", "w") do |csv|
  data.each { |cat| csv << [cat.name] }
end
数据=所有者。查找(2)。猫 CSV.open(“file.CSV”,“w”)do | CSV| data.each{| cat | csv
需要“csv”
数据=所有者。查找(2)。猫
CSV.open(“file.CSV”,“w”)do | CSV|

data.each{cat | csvcsv是一个行的集合,每个行是一个列的集合;它是一个二维数组,可以转换为文本形式。因此顶级的
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|
数据。每个|项|
行=[item.field1,item.field2,item.field3]
csv.open(“cats.csv”,“w”)do | csv|

irb(main):003:1*csvcsv是行的集合,每个行都是列的集合;它是一个二维数组,可以转换为文本形式。因此顶级的
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|
数据。每个|项|
行=[item.field1,item.field2,item.field3]
csv.open(“cats.csv”,“w”)do | csv|


irb(main):003:1*csv什么是
数据
?什么是
数据。查找()
return?什么是
.cats
return?@MarkReed我已经改变了,所以可能更容易理解。
所有者与
猫有关系
所有者有很多:
cats
。猫有
名字
年龄
…什么是
数据
?什么是
数据。find()
return?什么是
.cats
return?@MarkReed我已经改变了,所以它可能更容易理解。
所有者与
猫有关系
所有者有很多:
。猫有
名字
年龄
…你能解释一下为什么这样做以及为什么这样做吗这会将
[[“猫的名字”]
放入csv,而不仅仅是
猫的名字
@kemis您需要添加一个数组,而不是一个字符串。
[“\n”]
会起作用。@kemis如果你仔细看这个答案,你会发现首先构造了一个数组,然后使用
@tadman添加了数组。接受的答案是
csv。你能解释一下为什么这样做,为什么
csv会起作用吗
在csv中,不仅仅是
name\u of_cat
@kemis您需要添加一个数组,而不是一个字符串。
[“\n”]
会起作用。@kemis如果您仔细查看该答案,您会发现首先构建了一个数组,然后使用
@tadman添加该数组。接受的答案是
csv谢谢,但要知道一切都有
“something”
当我写入csv时:/你打算用这个csv文件做什么?任何电子表格程序都会用引号正确解析它。我希望它在excel中可读,当我打开它时,所有内容都在一行中,并且有
“[[something”
“something”
“something]]"`格式您是在查看文件还是CSV对象?在Ruby中检查时应该看到括号;如果您看到由
CSV
编写的实际文件中有括号,则说明出现了严重错误。包括用于创建文件的实际代码…此问题中的代码不会导致CSV文件中有任何括号NL除非cat名称中有括号。谢谢,但是当我写入csv时,要知道所有内容都有
“某物”
:你打算用这个csv文件做什么?任何电子表格程序都会用引号正确解析它。我希望它在excel中可读,当我打开它时,所有内容都在一行中,并且都有
[[某物”
“某物”
“某物]]`格式您是在查看文件还是CSV对象?在Ruby中检查时应该看到括号;如果您看到由
CSV
编写的实际文件中有括号,则说明出现了严重错误。包括用于创建文件的实际代码…此问题中的代码不会导致CSV文件中有任何括号除非猫的名字有括号。
$ 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
$