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

问题描述 投票:0回答:1

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

遵循此Wiki 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"}')但是可以使它起作用,对我来说没有结果。

ruby-on-rails ruby ruby-on-rails-5 jsonb ransack
1个回答
0
投票

删除花括号,因为它代表完整的哈希。您需要获取包含特定键和值的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

希望这会有所帮助。祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.