以下を使用できます。ここでは、からのcounter
数を表しますstars
current_user
review
# Single query with inner join
@event.reviews.joins(:stars)
.select("reviews.*, stars.id ,SUM(stars.user_id = #{current_user.id}) AS counter ")
.group("reviews.id ")
.order("counter DESC").limit(3)
上記の SQL クエリは、 と の内部結合テーブルを作成しreviews
ますstars
。
これらのテーブルのサイズによっては、フェッチ中のイベントに対して熱心にロードreviews
した方が速い場合があります。例えばstars
@event
# Eager loading with separate queries
@event = Event.find(params[:id]).includes(:reviews => :stars)
上記のメソッドは、イベントに関連付けられたすべてのレビューのすべての星を取得する単一のクエリを作成します。
stars
同じリクエストの他の場所でとを使用している場合はreviews
、 でそれらを熱心にロードすることをお勧めしますincludes
。