首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails ransack gem使用键值对作为参数搜索jsonb列

Rails ransack gem使用键值对作为参数搜索jsonb列
EN

Stack Overflow用户
提问于 2020-01-28 13:34:39
回答 1查看 669关注 0票数 2

如何正确地搜索JSONB列,将key和value作为参数进行传递。

遵循这个维基https://github.com/activerecord-hackery/ransack/wiki/PostgreSQL-JSONB-searches

除了底部之外,所有的东西都可以工作,在底部,我们也可以通过传递键值来进行搜索。

代码语言:javascript
运行
复制
ransacker :within_json do |parent|
   Arel.sql("contacts.json_data::text") 
end

比如:Contact.all.ransack("within_json_cont" => '{"key": "value"}'),但可以让它工作,对我来说没有结果。

EN

Stack Overflow用户

发布于 2020-01-28 18:42:54

去掉大括号,因为它代表完整的散列。您需要获取包含特定键和值json数据。

代码语言:javascript
运行
复制
ransacker :within_json do |parent|
   Arel.sql("contacts.json_data::text") 
end

如果您使用的是PostgreSQL,此部分是正确的。如果你使用的是MySQL,你可以这样做

代码语言:javascript
运行
复制
ransacker :within_json do |parent|
   Arel.sql("contacts.json_data") 
end

这些数据是以文本形式存储在数据库中的,因此我们只需要搜索精确的文本。这可以通过以下方式完成

代码语言:javascript
运行
复制
Contact.ransack("within_json_cont" => '"key":"value"')

如果您想搜索某个键的特定值,您可以创建一个搜索器

代码语言:javascript
运行
复制
  ransacker :key do |parent|
    Arel::Nodes::InfixOperation.new('->>', parent.table[:json_data],
                                    Arel::Nodes.build_quoted('$.key'))
  end

希望这能有所帮助。祝好运

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59942681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档