在我的图表上,我正在尝试更改图表的起点但不起作用:
series: [{
name: 'Difficulty',
connectNulls:true,
color: '#FF0000',
pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 2.weeks.ago.at_midnight.to_i * 1000 %>,
data: [<% HomeworkStudent.where(:school_user_id => current_user.school_user.id).order('updated_at ASC').each do | homework_student| %>
[Date.parse(<%= homework_student.updated_at.to_json.html_safe %>), <%= homework_student.difficulty.to_json.html_safe %>],
<% end %>]
},
我的图表有效,但忽略了pointStart。如上所述我试图在我的表中使用updated_at属性。我知道上面的代码可能不是用Highcharts获取和呈现数据的理想方式,所以欢迎任何建议来清理它。
我需要做些什么改变才能让pointStart工作?
由于
答案 0 :(得分:1)
首先,您需要将数据中的x-axis
更改为时代,或者将图表中的时间间隔更改为毫秒(纪元时间)。
因此,您的数据应该更像:
data: <%= HomeworkStudent.
where(:school_user_id => current_user.school_user.id).
order('updated_at ASC').map {|e| [e.updated_at.to_i * 1000, e.id]}.
to_a.to_json.html_safe %>
也许你还应该添加一个关于你选择的过滤器。它不应该超过两周前:
data: <%= HomeworkStudent.
where(:school_user_id => current_user.school_user.id).
where('updated_at > ?', 2.weeks.ago.at_midnight).
order('updated_at ASC').map {|e| [e.updated_at.to_i * 1000, e.id]}.
to_a.to_json.html_safe %>
除此之外,您当然可以使用不是数字的标签,而是实际的单词。这有点复杂......
......或不......
您跳过(如“完全不使用”)以下内容:
pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 2.weeks.ago.at_midnight.to_i * 1000 %>,
在数据数组中使用数据值对:
data: <%= HomeworkStudent.
where(:school_user_id => current_user.school_user.id).
where('updated_at > ?', 2.weeks.ago.at_midnight).
order('updated_at ASC').
group_by {|e| e.updated_at.to_date}. # Group them rails-wise, not db-engine specific
map {|e| [e.first.to_s, e.second.sum(&:difficulty)] }. # get date and sum of difficulties, format e.first as you wish with **strftime**
to_json.html_safe %>