Rails Chartkick。具有嵌套哈希的多系列折线图

Rails Chartkick. Multiple Series line chart with nested hash

正在尝试制作多系列折线图。 (可视化工具是 Chartjs。)来自 README:

<%= line_chart [
  {name: "Series A", data: series_a},
  {name: "Series B", data: series_b}
] %>

我的数据已经采用 JSON 格式,但需要一些操作才能正确。原始表格如下所示:

=> [{"id"=>30,
  "runner"=>"Golden State Warriors",
  "price"=>1.51,
  "histories"=>[{"price"=>1.51, "created_at"=>"2016-11-19T17:42:18.699Z"}, {"price"=>1.51, "created_at"=>"2016-11-20T07:56:55.662Z"}]},
 {"id"=>32, ETC

所以,有了 markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']] }]}.flatten! 产生:

=> [
{:name=>"Golden State Warriors", :data=>[["2016-11-19T17:42:18.699Z", 0.6622516556291391], ["2016-11-20T07:56:55.662Z", 0.6622516556291391]]},
{:name=>"Los Angeles Clippers", :data=>[["2016-11-19T17:42:18.795Z", 0.1], ["2016-11-20T07:56:55.717Z", 0.1]]}, ETC

虽然我没有收到错误,但图表是一个空象限,[object Object] 在 0,0。

该图表在我的视图中位于 @markets.each 块中,因为我想创建多个图表,页面显示相同的内容但数据不同。我玩了一个 .each_with_index,我可以通过手动输入数据来部分显示图表,如 README 所示:

<%= line_chart [
      {name: markets[i]['runner'], data: markets[i]['histories'].map{|h| [h['created_at'], 1/h['price']]}},
      {name: markets[i+1]['runner'], data: markets[i+1]['histories'].map{|h| [h['created_at'], 1/h['price']]}}
    ] %>

它显示了图表上的前两个系列,但不是正确的方法,因为每个图表有不同的 i 个元素。

我能做什么?

使用 .each 方法解决了这个问题。我敢肯定有一种更简洁的方法可以做到这一点,但它目前有效。

def chart(markets)
  chart_data = markets.map{ |m| [name: m['runner'], data: m['histories'].map{|h| [h['created_at'], 1/h['price']]}]}.flatten
  line_chart chart_data.each do |m| 
    [{name: [:name], data: [:data]}]
  end
end