首页 > 解决方案 > Rails ActiveRecord Postgresql - 找不到在 JSON 类型列上执行 where 的结果

问题描述

我将我的 json 存储在 Postgresql 的 json 列(parsed_document)中:

{ "purchase_order": "8422" }

在我的 Rails 控制器上,我试图获取列 parsed_document :

Orders.where("parsed_document ->> 'purchase_order' = '8422'")

它没有返回任何结果。我错过了什么?

谢谢你。

导轨输出:

[19] pry(main)> SapWrite.where("parsed_document ->> 'purchase_order' = '8422'")
=>   SapWrite Load (2.2ms)  SELECT "sap_writes".* FROM "sap_writes" WHERE 
(parsed_document ->> 'purchase_order' = '8422')
[]

我发现了问题。不幸的是我。我从 MSQL 服务器中提取 JSON 并对其进行两次解析。

records.each do |row| 
  parsed_document = row["parsed_document"] 
  json_parsed_document = JSON.parse(parsed_document) 
  @SapWrite = SapWrite.new(parsed_document:json_parsed_document.to_json) 
  @SapWrite.save 
end

在数据库中,JSON 显然是正确的,但事实并非如此。

所以我从 json_parsed_document 变量中删除了 to_json ,现在它正在正确地编写 json ,现在我可以查询 json 字段。

JSON插入之前:

{\\\"purchase_order\\\":\\\"8314\\\"}

之后的 JSON:

{\"purchase_order\":\"8314\"}

标签: ruby-on-railsjsonpostgresql

解决方案


推荐阅读