0

(レール4を使用)

サブスクリプションEventモデルがあります。has_manyイベントのリストに、サブスクリプションの数を表示します。私が持っているすべてのイベントに対して私の見解でこれを行うには:

event.subscriptions.count

ただし、イベントごとにsubscriptionsカウントを取得するために後続のクエリが実行されるため、これによりパフォーマンス ヒットが発生します。

これを修正するために、私はすべてのサブスクリプションを取得することを考えました。

subscription_count = Event.all.map { |e| {e.id => e.subscriptions.count} }

次に、すべてのイベントに対してクエリを実行する代わりにevent idsubscription_countハッシュで を検索するだけです。ただし、これは明らかにすべてのクエリを個別に実行します。一度にジョブを実行するために集計クエリを実行する方法はありますか?

ありがとう!

4

2 に答える 2

0

次のように実行できます。

@events = Event.joins('LEFT JOIN subscriptions ON subscription.event_id = event.id').group('events.id').select('events.*, COUNT(subscriptions.id) AS number_of_subscriptions')

そして、ビュー内で次を使用します。

event.number_of_subscriptions
于 2013-09-11T17:08:17.297 に答える