Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用ActiveRecord原始查询强制转换JSON_Ruby On Rails_Json_Ruby_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 使用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

是否可以让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方法。

底层数据库接口往往有点有限,因为每个人都认为您使用的是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自动完成。