2016-07-08 272 views
0

在我的數據庫模型,我已經得到了它具有以下結構的JSON場:活動記錄:JSON查詢

json_field: {"data"=>{"key_1"=>"value1", "key_2"=>"value"} } 

嘗試這個使用select查詢:

Model.select(:id, "json_field -> 'data'") 
Model.select(:id, "json_field -> 'data' as data") 

產生的陣列的對象,但沒有選擇json字段。

#<ActiveRecord::Relation [#<Model id: 1, Model id: 2 ...>] 

感謝您的任何幫助。

回答

2

此:

#<ActiveRecord::Relation [#<Model id: 1, Model id: 2 ...>] 

是調用inspect查詢和inspect將只顯示該模型知道它的列的結果。該模型將在啓動過程中查詢表中的列,以便僅瞭解實際在表中的列。

ActiveRecord使用method_missing即時創建列存取器方法,因此它可以在查詢中創建方法,而不是實際表中的列。

所以你data是存在的,你只需要通過名稱來要求它,例如:

Model.select(:id, "json_field -> 'data' as data").map(&:data) 

會給你data值。

+0

我想你每天都會學到新東西,謝謝! –