Rails和Chart.js

random_user_0891

我正在尝试在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,很明显您正在使用groupdategem。让我们使用其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]

所以现在您终于可以将它们喂给受人尊敬的人了labelsdata如下

labels: <%= @books_count.keys.to_json.html_safe %>
data: <%= @books_count.values.to_json.html_safe %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章