2016-02-10 10 views
0

這是一個後續的問題這一個:如何在選擇使用ActiveRecord時排除存儲在Postgres中的json的部分?

How to select only part of json, stored in Postgres, with ActiveRecord

說我有一個模型User,其中有一個名爲settingsjson類型的字段。讓我們假設這個領域看起來大致是這樣的:

{ 
    color: 'red', 
    language: 'English', 
    subitems: 
    { 
     item1: true, 
     item2: 43, 
     item3: ['foo', 'bar', 'baz'] 
    } 
} 

到上面提到的問題,不同的是,我想知道如何排除JSON的一部分。所以在這裏,我要選擇一切從settings情況除外:

subitems: 
    { 
    item1: true, 
    item2: 43, 
    item3: ['foo', 'bar', 'baz'] 
    } 
+0

比相關的問題要複雜得多:]想一個解決方案使用兩個查詢套件嗎?首先查詢獲取所有頂級json密鑰,第二個查詢實際選擇所有希望排除的字段。 – Dani

+0

嗯,其實,我不介意只是選擇所有的鑰匙,我需要手動。所以我需要這樣的東西:'User.select(「settings - > ['color','language'] AS modified_settings」)',它應該返回對象,響應方法'modified_settings',它應該返回'顏色:'紅',語言:'英語'}'。你知道如何一次選擇多個鍵嗎? –

+1

不幸的是,我可以找到一種方法來一次檢索多個鍵。但是你總是可以用'keys_to_fetch.map {| k | 「設置 - >'#{k}'作爲設置_#{k}」}} join(',')' – Dani

回答

1
在我的情況


>>User.select("subitem -> 'item1' AS subitem1", "subitem->'item2' AS subitem2").map(&:attributes)

導軌5

相關問題