使用ActiveRecord原始查询强制转换JSON

时间:2017-07-12 23:12:43

标签: ruby-on-rails json ruby activerecord rails-activerecord

是否可以让ActiveRecord以某种方式从原始查询中转换JSON值?

这是一个示例,我希望将{"x": 1}结果作为哈希值转换,但我得到一个字符串:

irb(main):017:0> ActiveRecord::Base.connection.select_value(%{SELECT '{"x": 1}'::json})
(0.2ms)  SELECT '{"x": 1}'::json
=> "{\"x\": 1}"

irb(main):018:0> ActiveRecord::Base.connection.select_value(%{SELECT '{"x": 1}'::json}).class
(0.2ms)  SELECT '{"x": 1}'::json
=> String

请不要建议JSON.parse('{"x": 1}')。我需要ActiveRecord方法。

1 个答案:

答案 0 :(得分:0)

低级数据库接口往往有点受限,因为每个人都假设您正在使用ORM。但是,您可以欺骗ActiveRecord为您完成工作,因为大多数数据库处理逻辑都在ActiveRecord本身。

ActiveRecord查询通常使用查询结果而不是模型或表所说的内容,因此您可以这样说:

input

以及您获得的Model.select('2*3 as six') 个实例将具有Model个属性。

此诡计也适用于six

find_by_sql