Rails group by id使用字符串表示哈希键

时间:2011-12-01 20:18:03

标签: ruby-on-rails ruby

我的代码如下所示:

hash = MyModel.count(:group => 'id', :conditions => 'bla = "bla"')

返回的Hash包含字符串键。我希望他们成为一个整体。我知道可以使用Hash构造之类的东西手动转换map

编辑:

感谢您的回复。已经意识到这是一个json转换过程,它将ID转换为Strings,而rails确实使用了Fixnum,就像人们所期望的那样。

3 个答案:

答案 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] }