ActiveRecord PostgreSQL запрашивает массив - PullRequest
0 голосов
/ 05 ноября 2018

Я установил поле массива PostgreSQL, идентичное в этом примере на направляющих . Я запрашиваю в этих полях, как:

Book.where("'fantasy' = ANY (tags)")

Но мне нужно запросить обратное этого; все записи, где tags не включает 'fantasy' (в этом примере).

У кого-нибудь есть указания? Я не могу найти много документации по работе с полем массива PostgreSQL за пределами вышеупомянутого руководства.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Попробуйте это:

Book.where.not('tags @> ARRAY[?]', "fantasy")
0 голосов
/ 05 ноября 2018

Вы можете отменить свое состояние

Book.where("NOT('fantasy' = ANY (tags))")

Таким образом, вы можете изменить запрос для получения записей с записями NULL:

Book.where("NOT('fantasy' = ANY (tags)) or tags IS NULL")

Также вы можете запускать эти запросы в psql и проверять результаты

SELECT * FROM book WHERE NOT('fantasy' = ANY (tags)); 
SELECT * FROM book WHERE NOT('fantasy' = ANY (tags)) OR tags IS NULL; 
SELECT * FROM book WHERE 'fantasy' = ANY (tags) 

Может быть, нет записей без тега 'fantasy'?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...