Rails 7查询MySQL嵌套JSON字段遇错误,求解决方案
解决Rails 7 + MySQL 8嵌套JSON字段查询问题
正确查询写法
针对你的场景,有两种可靠的写法:
方法1:使用MySQL原生JSON字符串提取操作符->>
这个操作符会直接返回JSON字段的字符串值,无需额外处理引号:
# 位置参数写法 authors = Author.where("personal_info->>'$.address.state' = ?", 'CA') # 命名参数写法(更易读) authors = Author.where("personal_info->>'$.address.state' = :state", state: 'CA')
方法2:使用Rails的JSON包含查询(@>操作符)
利用MySQL的JSON包含特性,检查personal_info是否包含指定的嵌套结构:
authors = Author.where("personal_info @> ?", { address: { state: 'CA' } }.to_json)
为什么你之前的写法报错
你之前的尝试存在SQL语法错误:
- 路径格式错误:嵌套JSON的路径应该是
$.address.state,而非拆分多次写$.address再$.state - 操作符使用错误:
->返回的是JSON对象,需要用->>来提取字符串值,否则会带引号,无法直接和字符串'CA'比对
这些语法错误导致数据库返回异常结果,Rails无法正常解析,从而抛出(Object doesn't support #inspect)错误。
内容的提问来源于stack exchange,提问作者EastsideDev
相关产品推荐
相关产品推荐

