将数据写入Ruby中的csv文件中

时间:2018-07-23 19:34:45

标签: ruby ruby-on-rails-3

我在用ruby写入CSV文件时遇到问题,无法弄清。

> header = "Full Name, Email, Phone Number" csv_file =
> CSV.open("myfile.csv", "wb") do |csv|
>     csv << header
>     inactive_users_id.each do |inactive_id|  #inactive_users_id is just an array on integers, which represent user id
>         full_name = User.find(inactive_id).full_name
>         email = User.find(inactive_id).email
>         phone_num = User.find(inactive_id).phone_number
>         desired_info = Array.new
>         desired_info.push(full_name)
>         desired_info.push(email)
>         desired_info.push(phone_num)
>         csv << desired_info
>       end 
>    end

我确实收到以下错误:

  1. “全名,电子邮件,电话”的未定义方法“地图” 数字”:字符串
  2. 如果我删除行csv <<标头,则我的csv文件为     像这样:[138]->代表id和其他     东西不在那里。

可能是什么问题? 谢谢!

1 个答案:

答案 0 :(得分:1)

虽然我无法复制您的问题,请尝试以下操作:

headers = ["Full Name", "Email", "Phone Number"]
CSV.open("myfile.csv", "wb", write_headers: true, headers: headers ) do |csv|
  User.where(id: inactive_users_id)
      .pluck(:full_name, :email, :phone_number)
      .each do |row|
        csv << row
      end
end

在这里,我们将在1个查询中收集所有User(而不是您当前每个User的3个),而仅将所需的列转换为Array(使用{{1 }})。然后,我们将每一个都连续地推入#pluck

正如在第3条滑轨中的注释中指出的那样,csv不能用于多列(或完全取决于版本),而应该使用pluck,然后将循环内的属性引用到创建行