0

Rails アプリには、User モデルと Posts モデルがあります。

:post_rate方法があります

def self.post_rate(month_start, month_end)
     where('created_at >= ? AND <= ?', month_start, month_end).map { |p| p.created_at.beginning_of_day }.uniq.size.to_f / (month_start - month_end).to_f 
end

これは、特定の期間にユーザーが投稿した日数の割合を示しています。

ユーザー表示ページで、ユーザーの投稿頻度を月ごとにまとめて表示したいと考えています。次のような配列が必要です。

['Month', 'Frequency'],
['Jan',  0.1],
['Feb',  0.5],
['Mar',  0.9],
etc..

(ラベルとタイトルが必要です)。

どうすればこれを達成できますか?

パフォーマンスに関してどのような考慮事項を考慮する必要がありますか?

ありがとう

4

1 に答える 1

1

Railsが十分に新しい場合は、ActiveRecordのクエリスマートを使用して、SQLでこれを行うクエリをコンパイルできます。関数をGROUPBY句に渡すには、次の方法を使用しgroupます。

where('created_at >= ? AND <= ?', month_start, month_end).group("to_char(created_at,'MONTH')").count()

上記はPostgreSQLで機能します。group別のデータベースで機能させるには、argをに変更する必要がある場合があります。

結果は、キーがGROUP BY列で、値がカウントであるハッシュの形式になります。必要な形式のデータを取得するには、おそらく多少の変更が必要になります。

于 2012-06-09T12:52:38.850 に答える