Rails如何在2个日期之间创建每月的图表数据?
在我的模型中,我有:
def self.chart_data(start, slut) if start.nil? start = 2.weeks.ago end if slut.nil? slut = Date.today end range = start.to_date..(slut.to_date + 1.day) if start.to_date.beginning_of_month.to_s != slut.to_date.beginning_of_month.to_s kliks = count( :group => 'date(month)', :conditions => { :created_at => range } ) # CREATE JSON DATA FOR EACH MONTH - PROBLEM HERE (range).map(&:beginning_of_month).uniq.map(&:to_s).each do |month| { created_at: month, clicks: kliks[month] || 0 } end else kliks = count( :group => 'date(created_at)', :conditions => { :created_at => range } ) #WORKS FINE DATA FOR EACH DAY (start.to_date..slut.to_date).map do |date| { created_at: date.strftime("%F"), clicks: kliks[date] || 0 } end end end
我在表格中添加了一个列月份。 这是created_at列的begin_of_month。 这样很容易按月分组。 但是,如何为每个月创建JSON数据? 目前它不起作用。 但是每天的数据运行良好。
Klik.chart_data("1/8/2012", "22/9/2012")
的结果Klik.chart_data("1/8/2012", "22/9/2012")
第一个答案结果:
尝试使用
(start.to_date..slut.to_date).map(&:beginning_of_month).uniq.map do |date| { created_at: date.strftime("%F"), clicks: kliks[date] || 0 } end
要么
(start.to_date.beginning_of_month..slut.to_date).reject{|date| date.day !=1}.map do |date| { created_at: date.strftime("%F"), clicks: kliks[date] || 0 } end
Interesting Posts
在ruby / rails中,如何对日期有时为空的日期值进行排序?
在第一次失败时停止执行特定的rspec测试(不是测试套件)
如何在Ruby中调度instance_methods?
没有gem的Paginate Next,Previous,Name.order(:id).limit(10).offset(0)的按钮
设计 – 如何更改设置,以便电子邮件地址不需要是唯一的
Rails用于可以映射到不同模型类型的模型的活动记录关联
与rspec-rails 3.0.1和shoulda的测试关联不起作用
Rails活动记录查询获取最常见的对象
使用RVM Mac OS X安装Ruby 1.9.2时出现问题
如何有力地解析格式错误的CSV?