2016-07-08 221 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

我想你每天都会学到新东西,谢谢! –