Rails обыскивает gem для поиска столбца jsonb с парой ключ-значение в качестве параметра - PullRequest
0 голосов
/ 28 января 2020

Как правильно выполнять поиск в столбце 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"}') Но может заставить его работать, никакого результата для меня.

1 Ответ

0 голосов
/ 28 января 2020

Удалите фигурные скобки, так как она представляет собой полный ха sh. Вам необходимо получить json данные, содержащие указанный ключ и значение c.

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"')

. И если вы хотите найти определенное значение c для ключа, вы можете создать вымогателя

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

Надеюсь, это поможет. Удачи

...