我想为我公司的实习项目创建一个线图。在yAxis我想要订单。在xAxis我想要月(1月 - 12月)。因此xAxis上有12个标签。我的问题是只有前12个订单从数据中挑选出来:我怎样才能解决这个问题 ?同样的问题是一个月。我在这里放了一个链接来说明。 http://imgur.com/a/VJBvj 这是我的代码:
<canvas id="orderChartCurrentMonth" width="400" height="400"></canvas>
<script>
<%= foo = ((Date.today).beginning_of_month) %>
var ctx = document.getElementById("orderChartCurrentMonth");
var orderChartCurrentMonth = new Chart(ctx, {
type: 'line',
data: {
labels: [
"<%=foo %>", "<%=foo + 1.week%>", "<%=foo + 2.week %>","<%=foo + 3.week%>", "<%=foo + 4.week%>"
], //x-Achse
datasets: [{
label: 'Graph Orders last week',
data: <%= (foo..foo.end_of_month).map { |date| Company.graph_order(date).to_f}.inspect %> //y-Achse
}]},
options:{
legend:{
display: false
},
scales: {
xAxes: [{
ticks: {
stepSize: 10
}}]}}})
</script>
问候
答案 0 :(得分:0)
您应该使用提供按月(或周)分组的汇总数据的查询。虽然您可以使用数据库的日期函数来完成,但我建议使用Groupdate gem,它会在您经常需要的情况下简化流程。你可以做类似的事情。
# this should probably be done in a controller action
<% @data = Order.where(date: 1.years.ago.beginning_of_month..Time.now).group_by_month(:date).count %>
# get an array of monthly labels in js file
...
labels: <%= @data.map{ |month, order_count| month } %>
...
# get the values for those months
...
data: <%= @data.map{ |month, order_count| order_count } %>
...
毋庸置疑,此示例仅显示每月订单数量。如果您需要其他值,则必须调整查询。此外,Groupdate提供了许多选项来对这些数据进行分组。请务必阅读文档:https://github.com/ankane/groupdate