2015-07-04 13 views
0

我认为将数据库数据转换为图表结构,将活动记录数据转换为JS图表结构的优雅方式

这对于使用ruby来说是非常痛苦的工作。

拿一个例子,

我想显示折线图。

X-AXI(时间:月),Y-AXI(价值)

我需要union数据集

然后从每个数据集提取值之间的几个月里,

如果no data为相应的月份

您需要填充零或任何其他值,您不能让它为空。否则图表将会移动。

我不知道是否有任何优雅的方式来解决我的问题。

因为要生成图表。这对我来说是一项艰巨而繁琐的工作。感谢

数据集1(从活动记录获得)

Month: January, value: 65 
Month: February, value: 59 
Month: April, value: 81 

数据集2(来自活性记录获得)

Month: January, value: 28 
Month: March, value: 40 

数据结构等为JS图表中术语

labels: ["January", "February", "March", "April"], 
    datasets: [ 
     { 
      data: [65, 59, 0, 81] 
     }, 
     { 
      data: [28, 0, 40, 0] 
     } 
    ] 

回答

0

想哈希和数组,并让自己熟悉诸如Array#map等方法。

irb(main):002:0> d1 = [["January", 65], ["February", 59], ["April", 81]]; 
irb(main):003:0* d2 = [["January", 28], ["March", 40]]; 

irb(main):007:0> h1 = Hash[d1] 
=> {"January"=>65, "February"=>59, "April"=>81} 
irb(main):008:0> h2 = Hash[d2] 
=> {"January"=>28, "March"=>40} 

irb(main):009:0> months = ["January", "February", "March", "April"] 
=> ["January", "February", "March", "April"] 

irb(main):010:0> months.map{ |month| h1[month] } 
=> [65, 59, nil, 81] 
irb(main):011:0> months.map{ |month| h1[month] || 0 } 
=> [65, 59, 0, 81] 

irb(main):012:0> [h1,h2].map{ |dataset| months.map{ |month| dataset[month] || 0 } } 
=> [[65, 59, 0, 81], [28, 0, 40, 0]] 
irb(main):015:0> [h1,h2].map{ |ds| {data: months.map{ |month| ds[month] || 0 }} } 
=> [{:data=>[65, 59, 0, 81]}, {:data=>[28, 0, 40, 0]}] 

irb(main):017:0> dsets = [h1,h2].map{ |ds| {data: months.map{ |month| ds[month] || 0 }} } 
=> [{:data=>[65, 59, 0, 81]}, {:data=>[28, 0, 40, 0]}] 
irb(main):018:0> {labels: months, dataset: dsets} 
=> {:labels=>["January", "February", "March", "April"], :dataset=>[{:data=>[65, 59, 0, 81]}, {:data=>[28, 0, 40, 0]}]} 
+0

'months.map'节省了我很多'if else confitions' – newBike

相关问题