私は現在、NFLのpick'emリーグサイトを構築しています。ユーザーモデル、ゲームモデル、および各ユーザーの個々の選択をキャプチャする結合テーブルがあります。ゲームモデルには、勝つための「W」、負けるための「L」、プッシュ(引き分け)のための「P」のいずれかで構成される「結果」属性があります。
順位表の作成で問題が発生しています。現在、ユーザーモデルには2つのメソッドがあります。
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メソッドを使用しているようです。このメソッドでは通常、何らかの属性がデータベースに既に存在している必要があり、コントローラーで呼び出すことができます。
この勝率属性をデータベースに追加しようとしましたが、ゲームの結果が更新されるたびにユーザーのスコアを更新するコールバックを理解できないようです。
ビューで計算された属性を並べ替える解決策、またはこの勝率をユーザーモデルに追加する方法はありますか?
前もって感謝します!