我目前正在建立一个 NFL 选秀联盟网站。我有一个用户模型、一个游戏模型和一个连接表,用于捕获每个用户的个人选择。游戏模型具有“结果”属性,其中“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 方法,该方法通常需要数据库中已有某些属性,然后您可以在控制器中调用该属性。
我还尝试将此获胜百分比属性添加到数据库中,但我似乎无法找出每当游戏结果更新时都会更新用户分数的回调。
对于对视图中计算的属性进行排序或将此获胜百分比添加到用户模型中的方法有什么解决方案吗?
提前致谢!
为什么不在模型中而不是在视图中进行计算呢?添加另一个方法,如下所示:
此代码位于您的用户模型中:
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 %>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)