我有一个模型需要按:sending_ip分组,这是数据库中的“ cidr”列。
@count_hash = Webhook.group('sending_ip').count
产生此哈希值:
{#<IPAddr: IPv4:213.32.165.239/255.255.255.255>=>127000, #<IPAddr: IPv4:153.92.251.118/255.255.255.255>=>228000}
我不知道如何引用这种类型的密钥。以下是一些我尝试调用这些键的方法的示例。它们全部返回nil或错误。
@count_hash[#<IPAddr: IPv4:213.32.165.239/255.255.255.255>]
@count_hash["#<IPAddr: IPv4:213.32.165.239/255.255.255.255>"]
@count_hash[<IPAddr: IPv4:213.32.165.239/255.255.255.255>]
@count_hash["#<IPAddr: IPv4:213.32.165.239/255.255.255.255>"]
在我的应用程序的其他地方,我有一个更简单的示例,效果很好。其他示例按esp进行分组,从而导致此哈希:
{"hotmail"=>1000, "gmail"=>354000}
第二个哈希,我可以很容易地引用
@count_hash["gmail"]
获得354000的预期结果
如何使用send_ip分组的以前的哈希实现相同的功能?预先感谢您的见解。
答案 0 :(得分:1)
此:
#<IPAddr: IPv4:213.32.165.239/255.255.255.255>
是在#inspect
的实例上调用IPAddr
的结果。因此,键是IPAddr
实例,您可以说:
ip = IPAddr.new('213.32.165.239')
@count_hash[ip]
# 127000
或者您可以遍历哈希值:
@count_hash.each { |ip, n| ... }
或在其键上:
@count_hash.keys.each { |ip| ... }
取决于您需要执行的操作。如果更方便,您甚至可以将键转换为字符串:
@count_hash = @count_hash.transform_keys(&:to_s)
# or
@count_hash.transform_keys!(&:to_s)