12/08/2018, 13:31

Thống kê, bảng biểu cho trang admin web với RoR

Bài này mình sẽ làm 1 demo nhỏ về việc làm thống kê cho trang admin với gem rails_admin. Các bạn có thể tham khác bài trước https://viblo.asia/danglv/posts/6BAMYV49Gnjz để có thể tạo 1 trang admin cho ứng dụng rails. Để vẽ chart mình sẽ sự dụng gem 'fusioncharts-rails'. đầu tiên bạn download ...

Bài này mình sẽ làm 1 demo nhỏ về việc làm thống kê cho trang admin với gem rails_admin. Các bạn có thể tham khác bài trước https://viblo.asia/danglv/posts/6BAMYV49Gnjz để có thể tạo 1 trang admin cho ứng dụng rails. Để vẽ chart mình sẽ sự dụng gem 'fusioncharts-rails'.

  • đầu tiên bạn download thư việc http://www.fusioncharts.com/download/. sau đó copy thư mục js vào trong vendor/assets/javascripts/fusioncharts/.
  • require các dòng sau vào file app/assets/javascripts/application.js
//= require fusioncharts/fusioncharts
//= require fusioncharts/fusioncharts.charts
//= require fusioncharts/themes/fusioncharts.theme.fint
  • Trong model User chúng ta viết đoạn scope để lấy ra user được tạo trong 1 khoảng thời gian:
scope :created_in_time, ->(start_time, end_time){where(created_at: start_time..end_time)}

Tiếp đến, trong file my_action.rb bạn tạo dự liệu chart của user

month = Time.now.month
    categories = (1..month).map do |i|
      month_name = (Time.now - (month - i).month).strftime("%B")
      {label: month_name}
    end
    data = (1..month).map do |i|
      start_time = (Time.now - (month - i).month).beginning_of_month
      end_time = (Time.now - (month - i).month).end_of_month
      {value: User.created_in_time(start_time, end_time).count}
    end

    @chart = Fusioncharts::Chart.new({
      awidth: "600",
      height: "400",
      type: "mscolumn2d",
      renderAt: "chartContainer",
      dataSource: {
        chart: {
        caption: "Number User created",
        subCaption: "",
        xAxisname: "Month",
        yAxisName: "Count",
        # numberPrefix: "$",
        theme: "fint",
        exportEnabled: "1",
        },
        categories: [{
          category: categories
        }],
        dataset: [
          {
              seriesname: "Number of User",
              data: data
          }
        ]
      }
    })

Việc sau cùng là render chart đó ra view, trong file: app/views/rails_admin/main/my_action.html.erb

<div id="chart-container"><%= @chart.render() %></div>

Và đây là kết quả: Screenshot from 2016-05-30 10:40:57.png

  • Ngoài ra fusionCharts còn cung cấp rất nhiều loại charts khác nhau, các bạn có thể tham khảo ở đây: http://www.fusioncharts.com/ để có thể tạo các loại charts mà mình mong muốn.
0