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



如何正确搜索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 :key do |parent|
Arel::Nodes::InfixOperation.new('->>', parent.table[:json_data],
Arel::Nodes.build_quoted('$.key'))
end

希望这有帮助。祝你好运

最新更新