gpt4 book ai didi

ruby-on-rails - Rails 搜索 gem 以键值对作为参数搜索 jsonb 列

转载 作者:行者123 更新时间:2023-12-04 10:40:42 25 4
gpt4 key购买 nike

如何正确搜索 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

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

关于ruby-on-rails - Rails 搜索 gem 以键值对作为参数搜索 jsonb 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com