ユーザー、ゲーム、ポイントの3つのモデルがあり、ユーザーはゲームをプレイするためのポイントを獲得します。私がやろうとしているのは、最も人気のあるゲームのポイントが最も多いユーザーをビューに表示することです。
この質問を使用して、最も人気のあるゲームを特定しました。だから私は今Game.rbにこのスコープを持っています:
scope :most_popular_games,
select("games.id, name, count(points.id) AS points_count").
joins(:points).
group("games.id").
order("points_count DESC").
limit(5)
私のコントローラーには、次のものがあります。
@most_popular_games = Game.most_popular_games
私のモデル:
モデル
class Point < ActiveRecord::Base
belongs_to :game
belongs_to :user
end
class Game< ActiveRecord::Base
has_many :points
end
class User < ActiveRecord::Base
# no relationship for points or games
end
class GameRank < ActiveRecord::Base
belongs_to :game
belongs_to :user
end
ただし、どうすればよいかわからないのは、これらの各ゲームのユーザーあたりのポイントを合計して、各ゲームを異なる方法で識別する方法を作成することです。そのため、ビュー上でそれらをセグメント化します(つまり、ゲームごとに個別に結果が表示されます)。
これをコードに追加しようとしましたが、各ゲームの結果をビューで識別できるようにするための最良の方法がわかりませんでした。
@most_popular_games.each do |most_popular_game|
most_points_for_popular_game = GameRank.where("game_id =?", most_popular_game.id).order('total_points desc').limit(10)
end
私の質問は基本的に、5つのゲーム(@most_popular_games = 5つの結果)のそれぞれについて、「most_points_for_popular_game」(特定のゲームで最も多くのポイントを持つユーザー)の結果を再利用するにはどうすればよいですか?