You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Rails Active Record SQL Server Adapter查询哈希/JSON字段

如何用Active Record SQL Server Adapter查询JSON字段的单个值

既然你已经把properties字段改成SQL Server的JSON类型并通过JSON序列化存储,完全可以查询其中的summary字段。SQL Server有专门的JSON处理函数,之前用的PostgreSQL语法(->>)不适用,下面是正确的实现方式:

1. 精确匹配查询

如果需要精确匹配summary的内容:

@requests = current_user.requests.where("JSON_VALUE(properties, '$.summary') = ?", params[:filter]) if params[:filter].present?

2. 模糊匹配查询

从你之前的代码看,应该是要做模糊搜索,用LIKE关键字配合JSON_VALUE即可:

@requests = current_user.requests.where("JSON_VALUE(properties, '$.summary') LIKE ?", "%#{params[:filter]}%") if params[:filter].present?

注:这里的字符串插值是安全的,params[:filter]会被Active Record自动转义后替换到占位符,不会有SQL注入风险。

3. 模型字段配置(可选)

确保你的模型正确配置了字段的序列化规则,Rails 5及以上版本可以直接指定类型:

class Request < ApplicationRecord
  belongs_to :user
  attribute :properties, :json
end

如果是旧版本Rails,使用serialize方法:

class Request < ApplicationRecord
  belongs_to :user
  serialize :properties, JSON
end

补充说明

  • JSON_VALUE是SQL Server提取JSON字段单个值的核心函数,第二个参数是JSON路径,$.summary表示根节点下的summary键;如果是嵌套结构(比如properties->details->title),路径写成$.details.title即可。
  • 若需要判断JSON字段中是否存在某个键,可以用JSON_QUERY或者ISJSON辅助验证。

内容的提问来源于stack exchange,提问作者spacerobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:46:06