Ruby 不同列值的字符串值出现次数
我有一个模型计数器,它返回以下记录:Ruby 不同列值的字符串值出现次数,ruby,ruby-on-rails-3,activerecord,Ruby,Ruby On Rails 3,Activerecord,我有一个模型计数器,它返回以下记录: 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
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
我没有得到散列值。这会给你稍微不同的输出,但我认为它可能比你展示的更接近你想要的 您可以使用以下查询:
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,
...
}
其他人可能有更好的方法,但似乎这会让你离得很近。谢谢@dinjas。我们是否可以不使用列计数器而获得相同类型的结果?@Vinay Yea,您应该能够执行
counter.group([:name,:flowers])。count
非常感谢@dinjas。这很有效。你能建议使用正则表达式将名字从vino_rose拆分为vino吗?@Vinay,这取决于你用它做什么。如果您只需要拆分它,您可以先执行name=“vino_rose”.split(“”);flower=“vino_rose”.split(“”).last
您可以使用正则表达式查看字符串是否包含子字符串,如“vino_rose”=~/vino/
(将返回匹配发生在字符串中的索引,在本例中为0
,如果不匹配则为nil
)。您也可以使用“vino_rose”。包括?(“vino”)
,它将返回true
或false
非常感谢您,非常感谢您的解释帮助我清楚地理解。谢谢