我的代码如下所示:的Rails通过ID组使用了哈希值的字符串
hash = MyModel.count(:group => 'id', :conditions => 'bla = "bla"')
返回Hash
有是字符串键。我希望他们成为整数。我知道可以使用类似于map
构造的东西手动转换Hash
。
编辑:
感谢您的回复。已经意识到这是一个JSON转换过程,将ID转变为字符串,而轨道实际上使用了Fixnum,正如人们所期望的那样。
我的代码如下所示:的Rails通过ID组使用了哈希值的字符串
hash = MyModel.count(:group => 'id', :conditions => 'bla = "bla"')
返回Hash
有是字符串键。我希望他们成为整数。我知道可以使用类似于map
构造的东西手动转换Hash
。
编辑:
感谢您的回复。已经意识到这是一个JSON转换过程,将ID转变为字符串,而轨道实际上使用了Fixnum,正如人们所期望的那样。
当我使用你的代码时,我得到整数键(rails 3.07),什么是列的id类型?
如果你想要做手工:
new_hash = hash.inject({}){|h,a| h[a.first.to_i] = a.last; h}
是的,我最终这样做,似乎是一个耻辱,Rails返回整数id作为一个字符串。编辑:轨道2.3.2。 – Finbarr
hash = MyModel.count(group: 'id', conditions: 'bla = "bla"')
应该有Fixnum
键在默认情况下,因为ID是Fixnum对象的实例。
会发生什么事是,ActiveRecord的总是取结果作为字符串,然后Rails的需要将它们转换为根据数据库列的类型其它数据类型的护理(我们说他们是类型转换)。
所以这可能是一个Rails的bug或'id'列没有设置为整数(这将是令人惊讶的)。
如果你不能修复它,手动将其转换:
hash.each_with_object({}) do |(key, value), hash|
hash[key.to_i] = value
end
new_hash = Hash[hash.map { |k, v| [k.to_i, v] }
我认为所有的ActiveRecord哈希存储为字符串和实例化时,会自动转换为各自的类型。 – Sean