42

製品で静力学計算を行っています。ユーザーは、投稿されたコメントなど、いくつかの操作を実行しました。過去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...}

またはもっと良い方法はありますか?

ありがとう!オレン

4

7 に答える 7

91

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}

グループ化のために「マイクロ秒」から「ミレニアム」までの値を受け入れます

于 2012-09-21T11:38:37.667 に答える
31

この場合、私にとって最善の解決策は、そのまま SQL で実行するか、Ruby の group_by 関数を使用することでした。

@user.all.group_by{ |u| u.created_at.beginning_of_month }
于 2010-01-11T22:40:33.907 に答える
13

私の推測は次のようになります:

@user.comments.count(:group => "year(created_at),month(created_at)")

ドライコード、ymmv

于 2009-05-24T04:17:42.713 に答える
4

group_by を使用する

@user.comments.group_by(&:week)

class User < ActiveRecord::Base
  def week
    some_attribute_like_date.strftime('%Y-%W')
  end
end

これにより、YYYY-WW の形式でグループ化されたリストが得られます。

于 2014-09-05T12:37:35.557 に答える
2

has_activityプラグインを確認してください。

于 2009-05-24T16:20:57.263 に答える