製品で静力学計算を行っています。ユーザーがいくつかの操作を実行したとします。たとえば、コメントを投稿したとします。過去1か月間、または過去1年間に1週間あたりに投稿したコメントの数を表示できるようにしたいと思います。
このようにグループ化するためにactiverecordを使用する方法はありますか?これを手動で簡単に行うのが最善の方法ですか?自分の基準に基づいてレコードの合計を反復処理するのですか?
class User < ActiveRecord::Base
has_many :comments
end
class Comments < ActiveRecord::Base
belongs_to :user
end
@user.comments(:all).map {|c| ...do my calculations here...}
それとももっと良い方法がありますか?
ありがとう!オーレン
この場合、私にとって最良の解決策は、直接SQLで実行するか、Ruby group_by関数を使用することです。
@user.all.group_by{ |u| u.created_at.beginning_of_month }
Postgresでできること:
@user.comments.group("DATE_TRUNC('month', created_at)").count
取得するため:
{"2012-08-01 00:00:00"=>152, "2012-07-01 00:00:00"=>57, "2012-09-01 00:00:00"=>132}
グループ化には「マイクロ秒」から「ミレニアム」までの値を受け入れます。 http://www.postgresql.org/docs/8.1/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC
これはより洗練されたバージョンです
@user.comments.group("year(created_at)").group("month(created_at)").count
私の推測は次のようなものです:
@user.comments.count(:group => "year(created_at),month(created_at)")
ドライコード、ymmv
Group_byを使用する
@user.comments.group_by(&:week)
class User < ActiveRecord::Base
def week
some_attribute_like_date.strftime('%Y-%W')
end
end
これにより、YYYY-WWの形式でグループ化されたリストが表示されます
グループの日付の宝石をチェックしてください
https://github.com/ankane/groupdate
最近のコミットがあり、postgresqlで動作し、グラフキックと簡単に統合して高速グラフ化し、タイムゾーンで動作します。
Has_activityプラグインを確認してください。