活动记录:JSON查询

时间:2016-07-08 11:15:08

标签: json postgresql activerecord rails-activerecord

在我的数据库模型中,我有一个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 ...>]

感谢您的帮助。

1 个答案:

答案 0 :(得分: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值。