2016-11-20 69 views
1

複数の折れ線グラフを作成しようとしています。 (ビジュアライザがChartjsです。)READMEから:Rails Chartkick。ネストされたハッシュを含む複数系列折れ線グラフ

<%= 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 

は、チャートが0,0で[object Object]と空の象限であります。

チャートは異なるデータで同じことを示すページを複数のチャートに作成したいので、私のビューで@markets.eachブロックにあります。私は.each_with_indexでいじって、私はチャートがちょうど手動READMEが示すようにデータを入力することにより、部分的に表示するために取得することができます。チャート上の最初の2つのシリーズを示しているが、右することはできません

<%= 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要素が存在するためです。

どうすればよいですか?

答えて

0

.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 
関連する問題