2013-02-16 58 views
1

在Rails應用程序我嘗試存儲2-d散在PostgreSQL hstore列,但對於輸出我得到的東西像如何獲得2-d散列作爲hstore列的輸出?

{ 「6/5」=> 「{\」 顏色\ 「=> \」白色\「}」,「8/1」=>「{\」color \「=> \」white \「}」,「8/2」=>「{\」color \「=> \」white \ 「}」,「8/3」=>「{\」color \「=> \」white \「}」}。

我該如何獲得二維散列作爲輸出,或者你可以給出一些建議,以便如何解析它?

回答

4

如果您需要將其轉換成散列這裏是你怎麼會做:

str = {"6/5"=>"{\"color\"=>\"white\"}", "8/1"=>"{\"color\"=>\"white\"}", "8/2"=>"{\"color\"=>\"white\"}", "8/3"=>"{\"color\"=>\"white\"}"} 
p str.each_with_object({}){|(k,v),h| h[k] = eval(v)} 

結果

{ 「6/5」=> { 「顏色」=>「白「}」,「8/1」=> {「color」=>「white」},「8/2」=> {「color」=>「white」},「8/3」=> {「color」 =>「white」}}

+0

這很好,但我想知道這是否應該不是hstore gem的函數,它總是將其作爲哈希函數返回。 – SteenhouwerD 2013-02-16 11:57:59

0

要存儲在SQL數據庫中的哈希值,你可以使用一個字符串列,這一行添加到模型:

serialize :my_hash_thingy 

應該處理好每一個序列化/反序列化的背景下,你將有塔哈希通常每次使用它。

+0

在我的模型中,我有 serialize:checkers,ActiveRecord :: Coders :: Hstore。 跳棋是hstore類型(postgreSQL) – 2013-02-16 10:55:46

+0

@AndreyYasinishyn我我有同樣的問題。第二級作爲字符串返回,我無法在其中導航,因爲它不再是散列。我還在我的模型中序列化了fied_name,ActiveRecord :: Coders :: Hstore,並且我的字段是postgresql的hstore – SteenhouwerD 2013-02-16 11:08:04

+0

文檔中提到「此模塊實現用於存儲鍵/值對集合的hstore數據類型」。所以我認爲它不可能存儲多維的哈希值。但另一方面,我在文檔中對此行感到困惑「%#hstore \t將hstore轉換爲二維鍵/值數組\t%#'a => foo,b => bar':: hstore \t {{a,foo },{b,欄}}」。但我不太清楚如何在rails 3.2.11中使用它。 – 2013-02-16 11:37:45