【发布时间】:2013-10-13 02:24:46
【问题描述】:
我有一个 ActiveRecord 查询,它会拉取一个随机选择的 Matchup 对象,其中该对决中的任何一名球员都不属于当前对手名称为“Bye Week”的球队。
模型定义:
Matchup 有两个字段,player_1 和 player_2,是 Player 对象的 ID。
每个玩家都属于_to Team,它有几个字段,例如对手周_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。
【问题讨论】:
-
嗯,这有点令人困惑。
player_1和player_2外键也是如此,还是这些方法返回实际的玩家对象?另外,您能否发布通过send调用的该方法的定义? -
我第二次去depa。请粘贴您的表结构。并提供一些时尚的例子:这些是我拥有的记录:.....这些我想要获取:......
-
是的,至少发布一下球队、球员和比赛是如何关联的。请使用描述性变量名!
o1、o2和m不要告诉读者任何事情。 -
@depa,我添加了描述并更新了变量名,有什么建议吗?
-
@EdgarsJekabsons,我添加了描述并更新了变量名,有什么建议吗?
标签: ruby-on-rails ruby-on-rails-4 rails-activerecord