不同的另一个列值的字符串值出现次数

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,
  ...
}

其他人可能有更好的方法,但看起来应该让你很接近。