Rails 4 +在HighCharts中基于日,周,月和年的数据过滤

时间:2015-05-26 14:39:40

标签: ruby-on-rails-4 highcharts

在我的Sqlite表中,我有超过5年的产品价格和数量记录。现在我正在尝试在High Charts中呈现数据。对于Filtration部分,我正在放置4个单选按钮,即日,周,月和年。

如果用户点击日期选择,则图表应呈现日期数据。如果用户单击“周”按钮,则“图形”应呈现每周计算的值,依此类推。

现在我无法实现它。我试图在MODEL中实现过滤器代码。

enter image description here

请提出建议,如何继续。

1 个答案:

答案 0 :(得分:2)

此解决方案快速而且脏,可能存在一些性能问题。我建议在下面进行潜在的优化。

假设产品型号具有以下架构,

# Table name: products
#
#  id         :integer          not null, primary key
#  name       :string
#  amount     :float
#  quantity   :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
models/product.rb中的

class Product < ActiveRecord::Base
  def self.group_by_day
    # queries the database 
    self.all.group_by { |p| p.created_at.beginning_of_day }
    # if you're using a different date field, replace 'created_at' with that field.
  end

  def self.quantity_by_day
    # returns an array of hashes, each containing the date and quantity
    quantity_array = []
    self.group_by_day.each do |day, products|
      quantity_array << {
        date: day.to_s(:db), 
        quantity: products.map(&:quantity).sum
      }
    end
    quantity_array
  end

  def self.group_by_week
    self.all.group_by { |p| p.created_at.beginning_of_week }
  end

  def self.quantity_by_week
    # ...
  end

  def self.group_by_month
    self.all.group_by { |p| p.created_at.beginning_of_month }
  end

  def self.quantity_by_month
    # ...
  end

end

Product.quantity_by_day.to_json会为您提供可用于图表的数据。这是使用数据的HighCharts图表的JSFiddle。 (我不知道为什么X轴日期对我不起作用,但图表显示正确。编辑:修复它。)

正如我前面提到的,查询所有产品并将它们归类为Ruby效率低下。我建议:

最后,显示您的Products表架构将有助于我们提出更具体的答案。