Rails запрашивает поле jsonb, которое содержит массив объектов json - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть столбец jsonb occurrences, который содержит следующее

[{"occurs_on"=>"2019-02-04 23:00:00 UTC", "status"=>"none"}, 
{"occurs_on"=>"2019-02-05 23:00:00 UTC", "status"=>"none"}]

Я пытаюсь получить элемент, имеющий часть даты (строки datetime), равную 2019-02-04 поэтому я использую LIKE для этой цели

Event.where("events.occurrences ->> :key LIKE :value", 
:key => 'occurs_on', :value => '2019-02-04%')

Это возвращает пустую коллекцию и я не уверен, почему он не может найти элемент

ОБНОВЛЕНИЕ

Я попробовал что-то подобное

sql = <<-HEREDOC
   SELECT  * FROM events WHERE ('{"status": "none"}' <@ ANY (ARRAY(select jsonb_array_elements(occurrences)))) LIMIT 1
HEREDOC

 result = ActiveRecord::Base.connection.execute(sql)

, и это сработало, но если я изменил sql на

SELECT  * FROM events WHERE ('occurrences->"occurs_on" LIKE "2019-02-04"' <@ ANY (ARRAY(select jsonb_array_elements(occurrences)))) LIMIT 1

, это вызовет ошибку!

У кого-нибудь есть идеи, как правильно использовать LIKE в этой ситуации?

...