我有一个模型计数器,它返回以下记录:
name.....flowers.....counter
vino.....rose.........1
vino.....lily.........1
gaya.....rose.........1
rosi.....lily.........1
vino.....lily.........1
rosi.....rose.........1
rosi.....rose.........1
我希望在表格中显示:
name | Rose | Lily |
---------------------
Vino | 1 | 2 |
---------------------
Gaya | 1 | 0 |
---------------------
Rosi | 2 | 1 |
我想显示每个不同名称的鲜花数量。我尝试过以下内容并想知道如何才能优雅地完成它?
def counter_results
@counter_results= {}
Counter.each do |name|
rose = Counter.where(flower: 'rose').count
lily= Counter.where(flower: 'lily').count
@counter_results['name'] = name
@counter_results['rose_count'] = rose
@counter_results['lily_count'] = lily
end
return @counter_results
end
我没有得到哈希值。
答案 0 :(得分:2)
这会给你略微不同的输出,但我认为它可能比你所展示的更接近你想要的东西。
您可以使用查询:
Counter.group([:name, :flowers]).sum(:counter)
获得如下所示的结果集:
{ ["vino", "rose"] => 1, ["vino", "lily"] => 2, ["gaya", "rose"] => 1, ["gaya", "lily"] => 0, ... }
你可以做这样的事情来生成哈希:
def counter_results
@counter_results = {}
Counter.group([:name, :flowers]).sum(:counter).each do |k, v|
@counter_results[k.join("_")] = v
end
@counter_results
end
结果哈希看起来像这样:
{
"vino_rose" => 1,
"vino_lily" => 2,
"gaya_rose" => 1,
"gaya_lily" => 0,
...
}
其他人可能有更好的方法来做到这一点,但似乎应该让你非常接近。