我正在运行以下查询...
require 'csv'
require File.dirname(__FILE__) + '/config/environment.rb'
file = "#{Rails.root}/public/data.csv"
registrations = OnlineCourseRegistration.where(course_class_id: 681).where(status: "Completed").where("score >= ?", "80").where("exam_completed_at BETWEEN ? AND ?", 3.years.ago, Date.today)
CSV.open( file, 'w' ) do |writer|
writer << registrations.first.attributes.map { |a,v| a }
registrations.each do |s|
if s.user_id
writer << User.find(s.user_id).email
end
writer << s.attributes.map { |a,v| v }
end
end
Run Code Online (Sandbox Code Playgroud)
这是失败 writer << User.find(s.user_id).email的错误:
`<<': undefined method `map' for "my_user@yahoo.com":String (NoMethodError)`
Run Code Online (Sandbox Code Playgroud)
基本上,我只想添加一个包含用户电子邮件地址的列。
这是不带电子邮件字段的当前输出
id cart_id user_id course_class_id created_at updated_at exam_attempts exam_completed_at evaluation_completed_at status score add_extension retest_cart_id retest_purchased_at
11990 10278 6073 681 2014-10-30 20:34:18 UTC 2014-12-17 14:48:39 UTC 2 2014-12-17 03:16:44 UTC 2014-12-17 14:48:39 UTC Completed 90 FALSE
11931 10178 6023 681 2014-09-02 22:35:08 UTC 2015-02-24 03:58:03 UTC 1 2015-02-24 03:56:12 UTC 2015-02-24 03:58:03 UTC Completed 80 FALSE
12015 10316 6089 681 2014-11-15 14:31:05 UTC 2014-11-18 20:14:13 UTC 1 2014-11-18 20:11:46 UTC 2014-11-18 20:14:13 UTC Completed 82 FALSE
12044 10358 6103 681 2014-12-03 15:56:39 UTC 2014-12-06 23:05:18 UTC 2 2014-12-06 23:02:13 UTC 2014-12-06 23:05:18 UTC Completed 94 FALSE
Run Code Online (Sandbox Code Playgroud)
所以我想在上面的每个列中附加一个电子邮件字段。
这是相当贫民窟。但完全披露,这是客户要求的临时报告,它会做他们需要的事情。我只是连接[User.find(s.user_id).email]到writer语句上。看起来简单地在它周围包裹括号就足以解决问题。这是完整的代码...
require 'csv'
require File.dirname(__FILE__) + '/config/environment.rb'
file = "#{Rails.root}/public/data.csv"
registrations = OnlineCourseRegistration.where(course_class_id: 681).where(status: "Completed").where("score >= ?", "80").where("exam_completed_at BETWEEN ? AND ?", 3.years.ago, Date.today)
CSV.open( file, 'w' ) do |writer|
writer << registrations.first.attributes.map { |a,v| a }
registrations.each do |s|
writer << s.attributes.map { |a,v| v } + [User.find(s.user_id).email]
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3474 次 |
| 最近记录: |