У меня есть запрос ActiveRecord, который вытаскивает случайно выбранный объект Matchup, где ни один из игроков в матче не находится в команде, имя текущего оппонента которой «Bye Week».Рефакторинг запроса ActiveRecord
Модель Определение:
Matchup имеет два поля, player_1 и player_2, которые являются ID объекта Player.
Каждый игрок принадлежит команде Team, которая имеет несколько полей, например. enemy_week_1, enemy_week_2 ... enemy_week_17.
current_week возвращает целое число от 1 до 17 на основе сегодняшней даты (оно определяет, на какой неделе сезона НФЛ мы находимся в настоящее время).
Прямо сейчас я делаю это так, но я хотел бы, чтобы удалить петлю, и использовать только запрос для выбора объекта, в случайном порядке, который удовлетворяет условию:
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, Rails 2 и 4.
Ну, это немного сбивает с толку. Итак, внешние ключи 'player_1' и' player_2', или эти методы возвращают реальные объекты игрока? Кроме того, вы можете опубликовать определение этого метода, вызываемого через 'send'? – depa
Я второй депа. Вставьте, пожалуйста, свою структуру таблицы. И приведу несколько примеров в моде: Это записи, которые у меня есть: ..... Этим я хочу быть выбранным: ...... –
Yup, хотя бы пост, связанный с Team, Player и Matchup. И, пожалуйста, используйте описательные имена переменных! '' '' o1''', '' 'o2''' и' '' m''' ничего не говорят читателю. – jcm