将哈希写入CSV文件,然后将值读回以形成哈希

时间:2012-05-06 21:48:49

标签: ruby csv ruby-on-rails-3.1 ruby-on-rails-3.2 export-to-csv

我正在试着解决我遇到的一个最新项目问题。这是Senario:

我正在调用GoToWebinar API来获取即将举行的网络研讨会。一切都运行良好,网络研讨会以哈希的形式提取,如下所示:

[
{
"webinarKey":5303085652037254656,
"subject":"Test+Webinar+One",
"description":"Test+Webinar+One+Description",
"times":[{"startTime":"2011-04-26T17:00:00Z","endTime":"2011-04-26T18:00:00Z"}]
},
{
"webinarKey":9068582024170238208,
"name":"Test+Webinar+Two",
"description":"Test Webinar Two Description",
"times":[{"startTime":"2011-04-26T17:00:00Z","endTime":"2011-04-26T18:00:00Z"}]
}
]

我创建了一个rake任务,我们每天要运行一次,用这个哈希填充CSV文件,然后在控制器操作中读取CSV文件以填充视图。

以下是填充CSV文件的代码:

g = GoToWebinar::API.new()
@all_webinars = g.get_upcoming_webinars
CSV.open("#{Rails.root.to_s}/public/upcoming_webinars.csv", "wb") do |csv|
  @all_webinars.each do |webinar|
    webinar.to_a.each {|elem| csv << elem}
  end
end

我需要一些帮助,找出一种方法来保存以散列形式收到的信息,以保存在CSV文件中的方式保存订单,同时也是一种从信息中读取信息的方法。 CSV文件,它以相同的方式填充控制器操作中的哈希值。

3 个答案:

答案 0 :(得分:0)

您希望使用哈希的键(因为它们是常量)作为CSV文件的标题。然后按原样推动每个元素。

g = GoToWebinar::API.new()
@all_webinars = g.get_upcoming_webinars
headers= @all_webinars.keys
CSV.open("#{Rails.root.to_s}/public/upcoming_webinars.csv", "wb", headers: headers) do |csv|
  @all_webinars.each do |webinar|
    webinar.to_a.each {|elem| csv << elem}
  end
end

但是,您要确保哈希值内的所有数据都是平坦的。需要处理数组内部的哈希需要处理(可能只是删除时间并在哈希中有一个startTime和endTime键)。

答案 1 :(得分:0)

Alan Skorkin关于Ruby序列化和反序列化的这篇文章可能有所帮助。 Link here

答案 2 :(得分:0)

从我从所有示例和为完成此任务所做的工作中学到的东西,我认为绕过此类功能的最佳方法是创建一个rake任务并使用信息填充数据库并使用保存到的信息填充视图。

相关问题