Highstocks在轨道图中添加了n个系列

时间:2013-03-11 14:36:27

标签: ruby-on-rails ruby-on-rails-3 highcharts

我有一个名为'hack'的模型可以有很多'连续剧'。每个'序列'都可以有很多'观察'。 '观察'是图表数据(例如日期和值驻留)的位置。我希望能够创建一个单个hack的图表,该图表可以包含可变数量的序列号,每个序列号包含“观察结果”中图表的值。

我的黑客控制器的'show'动作如下所示:

def show
  @hack = Hack.find(params[:id])
  @obj = {}
  @hack.serials.each do |s|
    @obj[:name] = s.series_name
    data = s.observations.order("id asc").map{|x| [x.hs_date, x.value]}.to_s.gsub('"', '')
    @obj[:data] = data
  end
end

show.html.erb文件如下所示:

<div id="container" style="height: 500px; min-width: 500px"></div>

<script>
$(function() {
  // Create the chart
  window.chart = new Highcharts.StockChart({
    chart : {
      renderTo : 'container'
    },
    series : 
      <%= raw @obj.to_json %>
    });
});
</script>   

运行此代码时,图表会显示“无效日期”。我知道数据是正确的,因为当我使用单个数据系列时,Highstocks正确生成图表。在这种情况下,黑客控制器的show动作是:

def show
  @hack = Hack.find(params[:id])
end

将show.html.erb文件用作:

<div id="container" style="height: 500px; min-width: 500px"></div>

<script>
$(function() {
  // Create the chart
  window.chart = new Highcharts.StockChart({
    chart : {
      renderTo : 'container'
    },
    series : [{
      name: 'first',
      data: <%= raw @serial.observations.order("id asc").map{|x| [x.hs_date, x.value]}.to_s.gsub('"', '') %>
            }]
   });
 });
 </script>  

我的问题是如何添加n个连续出版物,其中n =特定hack中的连续出现数量来自rails的Highstocks图表?

2 个答案:

答案 0 :(得分:1)

好吧,如果我理解正确,你希望每个Serial在一个图中显示为自己的行。我不知道Ruby on Rails,所以我要去评论&#34;代码在这里。

基本概念是每个序列应该是系列列表中的自己的系列{}。

def show
  @hack = Hack.find(params[:id])
  @objs = []
  @hack.serials.each do |s|
    @obj = {}
    @obj[:name] = s.series_name
    data = s.observations.order("id asc").map{|x| [x.hs_date, x.value]}.to_s.gsub('"', '')
    @obj[:data] = data
    @objs APPEND THE NEW @obj
  end
end

然后在to_json内使用新eval数组中的@objs

var d = eval('<%= raw @objs.to_json %>');

在我们完成之后你必须查看字符串数组以将它们变成javascript数组,然后你可以通过&#34; d&#34;作为系列的价值。

for (var i=0;i<d.length;i++){
   d[i]['data'] = eval(d[i]['data']);   
}

这是显示概念的JSFiddle

答案 1 :(得分:0)

使用to_json,因此它更具可读性

series: <%= @serials.to_json %>

在您的控制器中,@serials

@serials = []
@hack.serials.each do |s|
  s.observations.each do |o|
    @serials << [o.hs_date, o.value]
  end
end