繁体   English   中英

Rails 搜索 gem 以键值对作为参数搜索 jsonb 列

[英]Rails ransack gem to search jsonb column with key value pair as parameter

如何正确搜索 JSONB 列,将键和值作为参数传递。

在此维基https://github.com/activerecord-hackery/ransack/wiki/PostgreSQL-JSONB-searches 之后

除了底部之外,一切都对我有用,据说我们也可以通过传递键值来搜索。

ransacker :within_json do |parent|
   Arel.sql("contacts.json_data::text") 
end

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

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

ransacker :within_json do |parent|
   Arel.sql("contacts.json_data::text") 
end

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

ransacker :within_json do |parent|
   Arel.sql("contacts.json_data") 
end

这些数据以文本形式存储在数据库中,因此我们只需要搜索准确的文本即可。 这可以通过

Contact.ransack("within_json_cont" => '"key":"value"')

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

  ransacker :key do |parent|
    Arel::Nodes::InfixOperation.new('->>', parent.table[:json_data],
                                    Arel::Nodes.build_quoted('$.key'))
  end

希望这可以帮助。 祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM