9

我目前正在建立一个 NFL pick'em 联赛网站。我有一个用户模型、一个游戏模型和一个连接表,用于捕获每个用户的个人选择。游戏模型有一个“结果”属性,它由“W”表示获胜,“L”表示失败,“P”表示推动(平局)。

我在建立排名页面时遇到了问题。我的用户模型中目前有两种方法:

def correct_games
  self.games.where(result: "W").count 
end

def total_games
  self.games.where('result != ?', "P").count 
end

correct_games 方法计算用户正确的选择。total_games 方法计算总游戏数(不计算导致推送的游戏)。

然后在我看来,我目前对每个用户都有:<%= number_to_percentage(current_user.correct_games.to_f / current_user.total_games) %>

这个部门给了我那个用户的胜率(#正确/总选择)。对于我的积分榜,我显然想要按胜率降序排列。问题是排序的唯一解决方案似乎是使用 .order 方法,该方法通常需要一些属性已经存在于数据库中,然后您可以在控制器中调用这些属性。

我也尝试将这个获胜百分比属性添加到数据库中,但我似乎无法找出一个回调来在游戏结果更新时更新用户的分数。

对视图中计算的属性进行排序或将此胜率添加到用户模型的方法的任何解决方案?

提前致谢!

4

1 回答 1

9

为什么不在模型中而不是在视图中进行计算?添加另一个方法,如下所示:

此代码进入您的用户模型:

def percentage_correct
  ((self.correct_games.to_f / self.total_games) * 100).to_i
end

def self.sorted_by_percentage_correct
  User.all.sort_by(&:percentage_correct).reverse
end

这是您在视图中使用它的方式:

<% User.sorted_by_percentage_correct.each do |u| %>
  <div><%= u.name %> has pick percentage of <%= u.percentage_correct %>%</div>
<% end %>
于 2012-10-14T06:18:25.833 回答