0

我正在创建一个活动图表,显示随着时间的推移保存到用户个人资料中的记录数(在本例中为“user.notes”,即用户 has_many notes)。下面函数的 json 输出很好地输入到图表库中。

但是,下面的函数在没有任何活动的情况下不会输出数周的数据...我需要这些“漏洞”,其中包含正确的星期日期...有人可以建议我如何做到这一点吗?

我相信“has_activity”gem 具有此功能,但我宁愿避免使用整个 gem 来执行此操作。

class Case < ActiveRecord::Base 
 def self.user_activity_profile(user)
    array = []
    user.notes.group_by{ |u| u.created_at.beginning_of_week }.each do |week, entries|
      array << { week: week.strftime("%d %b"), count: entries.count }
    end
    array.to_json
  end
end
4

2 回答 2

0

我相信这应该可以满足您的需求。它只记录每个用户的第一个和最后一个注释,然后一次通过 7 天的日期范围,这迫使它不要跳过任何几周。

class Case < ActiveRecord::Base 
  def self.user_activity_profile(user)
    array = []
    notes = user.notes
    first = notes.first.created_at.beginning_of_week
    last = notes.last.created_at.beginning_of_week
    (first..last).step(7){ |date| 
      array << [
        week:date.strftime("%d %b"), 
        count: notes.where("created_at BETWEEN ? AND ?", date, date + 1.week).count
      ]}
    array.to_json
  end
end
于 2013-08-23T06:36:33.153 回答
0
  def self.user_activity_profile(user)
    from = Time.now - 1.months
    to = Time.now
    tmp = from
    array = []
    begin
       tmp += 1.week
        array << [
          week: tmp.strftime("%d %b"), 
          count: user.notes.where("created_at BETWEEN ? AND ?", tmp, tmp + 1.week).count
        ]
    end while tmp <= to
    array.to_json
  end
于 2013-09-14T21:36:39.297 回答