我有三个模型用户,游戏和点,用户在玩游戏时获得积分。我正在尝试做的是在视图中显示最受欢迎的游戏得分最多的用户。
我用这个问题来确定最受欢迎的游戏。所以我现在在 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
我的问题基本上是我如何重用“most_points_for_popular_game”的结果 - 这是给定游戏中得分最高的用户 - 对于五场比赛中的每场比赛(@most_popular_games = 五个结果)?