我有一个名为'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图表?
答案 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