2012-05-24 60 views
6

1時間ごとに作成されたアイテムの数の配列を作成したいと思います。rails - 1日ごとのグループと1時間あたり

人の感情を追跡しているので、私のモデルはTrackMoodと呼ばれています。ちょうどmoodという名前の列とタイムスタンプがあります。

私は

TrackMood.where(mood: "good").group("hour(created_at)").count 

をすれば、私は {11 => 4、12 => 2、13 => 2、15 => 1}

私は2つの問題を持っているような何かを得ますここに

1昨日11時に作成されたアイテムを11時に追加されたアイテムに追加するだけでは、この日を追加するにはどうすればよいですか?

2何も作成されていない時間に0と表示されるようにするにはどうすればよいですか?

答えて

9

1)日付のちょうど時間部分をグループ化するのではなく、関連する日付の一部、つまりそれまでの日付をグループ化する必要があります。例えば。

TrackMood.where(mood: "good").group("date_format(created_at, '%Y%m%d %H')").count 

2)グループが見つからない場合でも、この呼び出しからハッシュを返すことになります。グループの数を確認する場合は、.sizeまたは.countと呼ぶことができます。あなたはSO-ポストdate_part

を使用することができますPostgreSQLの

+0

ブリリアント、私は自分自身が明らかにされていないことができます。その時間にアイテムが作成されていなければ、14 => 0をハッシュに入れたいと思います。 – Edward

+0

ああ、申し訳ありません、今、わかりました。正直言って、後で空のグループに追加するのは、永続化レイヤにそれらを提供することを要求するのではなく、ルビを使って追加するのが最善でしょう。 – Shadwell

関連する問題