0

ユーザーのプロファイルに経時的に保存されたレコードの数を示すアクティビティ チャートを作成しています (この場合は「user.notes」、つまりユーザー has_many メモ)。以下の関数からの json 出力は、チャート ライブラリに適切にフィードされます。

ただし、以下の関数は、アクティビティのない週のデータを出力しません...正しい週の日付がそこにあるこれらの「穴」が必要です...これを行う方法を誰かが提案できますか?

「has_activity」ジェムにはこの機能があると思いますが、ジェム全体を使用してこれを行うことは避けたいと思います。

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 に答える