Ruby on rails 使用ActiveRecord原始查询强制转换JSON
是否可以让ActiveRecord以某种方式从原始查询中转换JSON值 下面是一个示例,我希望将Ruby on rails 使用ActiveRecord原始查询强制转换JSON,ruby-on-rails,json,ruby,activerecord,rails-activerecord,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> ActiveReco
{“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方法。底层数据库接口往往有点有限,因为每个人都认为您使用的是ORM。但是,您可以诱使ActiveRecord为您完成这项工作,因为大多数数据库处理逻辑都在ActiveRecord本身中
ActiveRecord查询通常处理查询的结果,而不是模型或表所要表达的内容,因此您可以说:
Model.select('2*3 as six')
您返回的模型
实例将具有六个属性
这种诡计也适用于find\u by\u sql
:
> Model.find_by_sql(%q{select '{"a":11}'::jsonb as pancakes}).first.pancakes
=> {"a"=>11}
> Model.find_by_sql(%q{select '{"a":11}'::jsonb as pancakes}).first.pancakes.class
=> Hash
底层数据库接口往往有点有限,因为每个人都认为您使用的是ORM。但是,您可以诱使ActiveRecord为您完成这项工作,因为大多数数据库处理逻辑都在ActiveRecord本身中
ActiveRecord查询通常处理查询的结果,而不是模型或表所要表达的内容,因此您可以说:
Model.select('2*3 as six')
您返回的模型
实例将具有六个属性
这种诡计也适用于find\u by\u sql
:
> Model.find_by_sql(%q{select '{"a":11}'::jsonb as pancakes}).first.pancakes
=> {"a"=>11}
> Model.find_by_sql(%q{select '{"a":11}'::jsonb as pancakes}).first.pancakes.class
=> Hash
“我需要ActiveRecord方法”是什么意思?你想对结果做什么?你有模特儿吗?真正的查询是什么样子的?您是否尝试过ActiveModel序列化程序JSON?你可以在这里找到更多信息@muistooshort我只需要ActiveRecord级别的东西,也许可以基于PostgreSQL OID或类似的东西实现类型转换。我想让AR自动生成。你说的“我需要ActiveRecord方法”是什么意思?你想对结果做什么?你有模特儿吗?真正的查询是什么样子的?您是否尝试过ActiveModel序列化程序JSON?你可以在这里找到更多信息@muistooshort我只需要ActiveRecord级别的东西,也许可以基于PostgreSQL OID或类似的东西实现类型转换。我想让AR自动完成。