我的代码如下所示:
hash = MyModel.count(:group => 'id', :conditions => 'bla = "bla"')
返回的Hash
包含字符串键。我希望他们成为一个整体。我知道可以使用Hash
构造之类的东西手动转换map
。
编辑:
感谢您的回复。已经意识到这是一个json转换过程,它将ID转换为Strings,而rails确实使用了Fixnum,就像人们所期望的那样。
答案 0 :(得分:2)
hash = MyModel.count(group: 'id', conditions: 'bla = "bla"')
默认情况下应该有Fixnum
个键,因为id是Fixnum的一个实例。
ActiveRecord 总是将结果作为字符串获取,然后Rails会根据数据库列的类型将它们转换为其他数据类型(我们说它们是类型转换)。
所以它可能是一个Rails错误,或者'id'列没有设置为整数(这会令人惊讶)。
如果无法修复,请手动转换:
hash.each_with_object({}) do |(key, value), hash|
hash[key.to_i] = value
end
答案 1 :(得分:1)
当我使用你的代码时,我得到整数键(rails 3.07),id的列类型是什么?
如果您想手动执行此操作:
new_hash = hash.inject({}){|h,a| h[a.first.to_i] = a.last; h}
答案 2 :(得分:0)
new_hash = Hash[hash.map { |k, v| [k.to_i, v] }