假設我有一個模型User
,它有一個json
類型的字段,稱爲settings
。讓我們假設這個領域看起來大致是這樣的:如何僅選擇部分json,存儲在Postgres中,使用ActiveRecord
{
color: 'red',
language: 'English',
subitems:
{
item1: true,
item2: 43,
item3: ['foo', 'bar', 'baz']
}
}
如果我做User.select(:settings)
我會爲每一個用戶的所有設置。但我只想爲用戶獲取語言。我都嘗試:
User.select("settings -> 'language'")
和
User.select("settings ->> 'language'")
但這只是返回空對象:
[#<User:0x007f381fa92208 id: nil>,
...]
這是在所有可能的?如果是 - 我可以使用json
嗎?還是需要切換到jsonb
?
*空物件* - 確定嗎?試着對結果做'.map(&:attributes)'。 –
你說得對。 'attributes'返回這個'{「id」=> nil,「?column?」=>「English」}'。令我困惑的是,當選擇正常(而不是json)屬性時,對象通常看起來像這樣:'#'。然而,顯然json選擇的數據不能像那樣工作。 –
它只是'#to_s',它的定義方式只能輸出**已知的**列。 **來自'select'的Custom **列不知道在表內,因此它們不會被打印出來,但是[映射到不管](http://stackoverflow.com/questions/34701667) /在那裏-DO-WE-聲明的屬性對的一護欄模型/ 34705079#34705079)。 –