在我的Sqlite表中,我有超过5年的产品价格和数量记录。现在我正在尝试在High Charts中呈现数据。对于Filtration部分,我正在放置4个单选按钮,即日,周,月和年。
如果用户点击日期选择,则图表应呈现日期数据。如果用户单击“周”按钮,则“图形”应呈现每周计算的值,依此类推。
现在我无法实现它。我试图在MODEL中实现过滤器代码。
请提出建议,如何继续。
答案 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效率低下。我建议:
group_by
最后,显示您的Products表架构将有助于我们提出更具体的答案。