在我的数据库模型中,我有一个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 ...>]
感谢您的帮助。
答案 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
值。