我需要在Ruby中按年龄分组人员.我有他们的出生日期,以及一种多年回归年龄的方法.所以像这样的解决方案有效.
case
when (0..15).cover?(age_years)
'child'
when (16..24).cover?(age_years)
'16 to 24'
when (25..34).cover?(age_years)
'25 to 34'
when (35..44).cover?(age_years)
'35 to 44'
when (45..54).cover?(age_years)
'45 to 54'
when (55..64).cover?(age_years)
'55 to 64'
when age_years > 64
'really old'
else
'unknown'
end
Run Code Online (Sandbox Code Playgroud)
但是,我正在努力学习Ruby,并且正在寻找更优雅的解决方案.我想把age_ranges放到像这样的哈希数组中......
age_ranges = [{ name: 'child', min_age: 0, max_age: 15 },
{ name: '16 to 24', min_age: 16, max_age: 24 }]
Run Code Online (Sandbox Code Playgroud)
但我不知道如何查询这些数据以返回正确的名称,其中age_years在适当的范围内,甚至是这样的范围
age_ranges = [{ name: 'child', age_range: '0..15' },
{ name: '16 to 24', age_range: '16..24' }]
Run Code Online (Sandbox Code Playgroud)
看起来更整洁,但我不知道我是否写了胡言乱语,因为我不知道如何在年龄匹配时提取名称.
有人能指出我正确的方向吗?
我正在尝试根据列中的值对记录进行分组,因此我可以使用它在其他地方显示信息。目前,如果我指定列中的值,我就可以正常工作 -
@city_count = People.select('city,count(*)').where("city in ('london', 'paris')").group(:city).count
Run Code Online (Sandbox Code Playgroud)
如果我想要伦敦和巴黎的人员列表,但如果城市列表中还有悉尼、纽约、里约热内卢等,那么我不想继续将额外的城市添加到“城市”中,我会喜欢这个就可以找到每个城市选择的人。
有谁知道这样做的最佳方法?另外,如果它也可以包含 NULL 值。