我的代碼如下所示:的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