現在の対戦相手の名前が「Bye Week」であるチームにどちらのプレイヤーも所属していない、ランダムに選択された Matchup オブジェクトを取得する ActiveRecord クエリがあります。
モデル定義:
Matchup には、Player オブジェクトの ID である player_1 と player_2 の 2 つのフィールドがあります。
各プレイヤーはチームに所属します。このチームには、相手の週_1、相手の週_2 ... 相手の週_17 など、いくつかのフィールドがあります。
current_week は、今日の日付に基づいて 1 から 17 までの整数を返します (NFL シーズンの現在の週を決定します)。
現在、私はこのようにやっていますが、ループを削除し、クエリだけを使用して、条件を満たすオブジェクトをランダムに選択したいと思います。
def getRandomMatchup
current_week = view_context.current_week
matchup = Matchup.order("RANDOM()").first
opponent1 = Team.find(Player.find(m.player_1).team.send("opp_week_#{current_week}")).name
opponent2 = Team.find(Player.find(m.player_2).team.send("opp_week_#{current_week}")).name
while opponent1 == "Bye Week" || opponent2 == "Bye Week"
matchup = Matchup.order("RANDOM()").first
opponent1 = Team.find(Player.find(matchup.player_1).team.send("opp_week_#{current_week}")).name
opponent2 = Team.find(Player.find(matchup.player_2).team.send("opp_week_#{current_week}")).name
end
return matchup
end
私の考えはこのようなことをすることでしたが、正しく実行する方法がわかりません:
m = Matchup.where.not(Team.find(Player.find(m.player_1).team.send("opp_week_#{current_week}")).name: "Bye Week",
Team.find(Player.find(m.player_2).team.send("opp_week_#{current_week}")).name: "Bye Week").order("RANDOM()").first
Ruby 2 と Rails 4 を使用しています。