Рубиновый сиквел — как запрашивать массивы с расширением pg_array

Я использую расширение pg_array и дополнительную версию 4.1.1.

Я добавил расширение следующим образом:

Sequel::Database.extension :pg_array

Я создал такой столбец:

alter_table :emails do
  add_column :references, "text[]", null: true
end

Я могу загружать и извлекать массивы в столбец массива postgress, как и при работе с обычными массивами.

Из приведенной выше ссылки неясно, как выполнить запрос на основе значений в этом столбце массива.

Например, если одна строка в таблице электронных писем содержала эти значения в столбце ссылок:

                             references                             
--------------------------------------------------------------------
 {}
 {[email protected]}

Как я могу запросить таблицу электронных писем, чтобы найти строку, содержащую значение массива ссылок указанного выше значения:

Email.where(references: ????)

person dagda1    schedule 02.05.2014    source источник
comment
Пожалуйста, поместите пример здесь, в сообщении, для которого вы хотите помочь?   -  person Arup Rakshit    schedule 02.05.2014
comment
@ArupRakshit так понятнее?   -  person dagda1    schedule 02.05.2014
comment
Обычно вы хотите использовать такие операторы, как @>, чтобы определить членство, верно?   -  person tadman    schedule 02.05.2014


Ответы (2)


Используйте расширение pg_array_ops:

Sequel.extension :pg_array_ops
Email.where(Sequel.pg_array_op(:references).contains('[email protected]'))
person Jeremy Evans    schedule 03.05.2014
comment
Этот ответ все еще актуален? - person Sean Dunford; 26.09.2019
comment
@SeanDunford, для моего продолжения # 5.25.0 и psql # 11.5 это работает - person okliv; 24.11.2019
comment
как правильно выполнить миграцию схемы для полей массива с индексом? - person okliv; 24.11.2019
comment
Работа над сиквелом 4 требует .contains('{[email protected]}') - person Yaniv; 24.01.2020

Ты пытался?

ref = '5363f773bccf9'
emails = Email.arel_table
Email.where( emails[ :references ].matches( "%#{ref}%" ))
person Малъ Скрылевъ    schedule 03.05.2014