如何对计算值进行排序?

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

我正在讨论建立排名页面的问题。 我目前在我的Users模型中有两种方法:

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

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

然后在我看来,我目前为每个用户:

这个部门给了我那个用户的胜率(#correct / total picks)。 对于我的排名表,我显然希望获胜百分比的降序。 问题是排序的唯一解决方案似乎是使用.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| %> 
<%= u.name %> has pick percentage of <%= u.percentage_correct %>%
<% end %>