我正在尝试在Chart.js中获取条形图,以处理来自Rails应用程序的数据。我需要找到一种从Charts.js想要的格式从Rails数据库检索数据的方法。http://www.chartjs.org/docs/latest
Chart.js给出了使用data: [12, 19, 3, 5, 2, 3]
和的示例labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"]
所以我可以在控制器中做这样的事情
@data = [10, 9, 3, 5, 2, 3]
@color_labels = ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"]
@labels = []
@color_labels.each do |c_label|
@labels.push(c_label)
end
那么如果我添加了<%= @data.to_json.html_safe %>
,<%= @labels.to_json.html_safe %>
就可以将数据\标签从控制器传递到视图。
但是我真正想做的是从数据库中动态提取数据和数据标签。
因此,如果我尝试获取每月创建的图书数量
# num of books created per month
@books_count = Book.group_by_month(:created_at).count
它将具有此输出,{Sun, 01 Jul 2018=>12, Wed, 01 Aug 2018=>10, Sat, 01 Sep 2018=>9, Mon, 01 Oct 2018=>4}
我不确定如何将其设置为具有“每月书数”数组和具有月名称的“标签数组”的正确格式。
在我看来
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: <%= @labels.to_json.html_safe %>,
datasets: [{
label: '# of Votes',
data: <%= @data.to_json.html_safe %>,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
我不确定如何将其设置为具有“每月书数”数组和具有月名称的“标签数组”的正确格式。
通过查看group_by_month
,很明显您正在使用groupdate
gem。让我们使用其format
选项仅返回月份名称,keys
如下所示
@books_count = Book.group_by_month(:created_at, format: "%b").count
这将返回这样的结果
{"Jul" =>12, "Aug" =>10, "Sep" =>9, "Oct" =>4}
现在通过做@books_count.keys
,@books_count.values
应该给下面
@books_count.keys
#=> ["Jul", "Aug", "Sep", "Oct"]
@books_count.values
#=> [12, 10, 9, 4]
所以现在您终于可以将它们喂给受人尊敬的人了labels
,data
如下
labels: <%= @books_count.keys.to_json.html_safe %>
data: <%= @books_count.values.to_json.html_safe %>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句