2014-05-02 41 views
2

我使用Mysql2寶石與Ruby和Ruby Mysql2返回結果哈希我有結果變成使用用符號代替字符串作爲鍵

sql = "SELECT * FROM ... WHERE ... " 

results = ActiveRecord::Base.connection.execute(sql) 

results.each(:as => :hash) do |row| 
    finalresults << row 
end 

哈希但這將返回字符串作爲密鑰的哈希。我想要的是散列使用符號作爲關鍵字,因爲我聽說通常符號更有效。任何人都知道如何以有效的方式來做到這一點,而不會在返回結果後循環鍵。請注意,我的一些查詢可能會產生大量數據。

所以,與其

{'id'=>19201, 'name'=>'Foo', 'age'=>30} 

我想,

{:id=>19201, :name=>'Foo', :age=>30} 

在此先感謝

回答

2

您可以使用Hash#with_indifferent_access。雖然我不確定是否有辦法自動訪問results,但最有可能的是這是如何在引擎蓋下實現的,所以沒有性能處罰。

results.each(:as => :hash) do |row| 
    finalresults << row.with_indifferent_access 
end 
1

使用「symbolize_keys」標誌可能會獲得更好的性能。以下是文檔中的示例:

client.query("SELECT * FROM users WHERE group='githubbers'", :symbolize_keys => true)