不同的另一个列值的字符串值出现次数
Number of string value occurrences for distinct another column value
我有一个模型计数器,其中 returns 以下记录:
name.....flowers.....counter
vino.....rose.........1
vino.....lily.........1
gaya.....rose.........1
rosi.....lily.........1
vino.....lily.........1
rosi.....rose.........1
rosi.....rose.........1
我想在table中显示如下:
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
我没有得到哈希值。
这会给您带来稍微不同的输出,但我认为它可能比您显示的更接近您想要的。
您可以使用查询:
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,
...
}
其他人可能有更好的方法,但看起来应该让你很接近。
我有一个模型计数器,其中 returns 以下记录:
name.....flowers.....counter
vino.....rose.........1
vino.....lily.........1
gaya.....rose.........1
rosi.....lily.........1
vino.....lily.........1
rosi.....rose.........1
rosi.....rose.........1
我想在table中显示如下:
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
我没有得到哈希值。
这会给您带来稍微不同的输出,但我认为它可能比您显示的更接近您想要的。
您可以使用查询:
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,
...
}
其他人可能有更好的方法,但看起来应该让你很接近。