我确信这对你们很多人来说显然很简单,但作为一个菜鸟,我有一个问题包围着我的大脑。
我有一个名为Season的模型,数据看起来像这样 - (所有字段名都是小写的,如下图所示带帽以便于阅读)
Record Sport SeasonNumber
1 Football 84
2 Baseball 76
3 Basketball 52
4 Hockey 26
5 Football 85
6 Baseball 77
7 Basketball 53
8 Hockey 27
由于添加数据的方式,我知道Sport列的顺序总是一样。
我有另一个模型,我们称之为Coach,看起来像这样(为了简洁,只显示了我要询问的相关字段。)
Record Sport Season CoachName + otherdata
1 Football 84 Joe Smith
2 Football 84 Bob Jones
3 Football 84 Alex Trebek
4 Football 84 Computer
5 Football 84 Computer
6 Football 84 Computer
7 Baseball 76 Hank Aaron
8 Baseball 76 Computer
9 Football 85 Joe Smith
10 Football 85 Bob Jones
11 Football 85 Computer
12 Football 85 Computer
13 Football 85 Computer
14 Football 85 Sam Spade
... etc.
我想要做的是,对于Sport / SeasonNumber的最新“组合”[四项运动,只有每项运动的最新季节],得到不是“计算机”的CoachNames数量。
首先,我从季节表中提取最后4条记录
@seasons = Season.last(4)
现在我想迭代@seasons数组,以获得每个运动在最近一个赛季中人类教练的数量。如果我只有一组“数据”(例如“足球,87”,我可以这样做:
控制器
sp=@seasons.sport
sn=@seasons.seasonnumber
humancount=Coach.human(sp,sn)
模型
scope :people, -> {where.not(coachname: "Computer")}
def self.human(sp,sn)
humans=Coach.people.count.where(["sport = ? and season = ?", sp,sn])
end
但是,我想要回归的是一个数组,其中包括“足球人”,“棒球人”,“篮球人”和“曲棍球人”。如何将@seasons的结果/元素传递给方法并获取数组?我试图避免写一个特定于足球的查询,一个用于棒球,一个用于篮球,一个用于曲棍球。
我认为答案在于使用.map
,但我只是没有意识到它。或者我可能只需要遍历@seasons数组中的每个“记录”?
答案 0 :(得分:0)
num_human_football_coaches = Coach.where("name != ?", "Computer").where(sport: "Football").count
答案 1 :(得分:0)
你应该这样做
Coach.where("name != ?", "Computer").group(:sport).count
这会让你得到你想要的东西。
答案 2 :(得分:0)
我最后只是通过“蛮力”来做到这一点。
sn=@seasons.seasonnumber
footballhumancount=Coach.human("football",sn)
baseballhumancount=Coach.human("baseball",sn)
basketballhumancount=Coach.human("basketball",sn)