У меня есть модель статьи, которая has_and_belongs_to_many Tag.Выберите статью, в которой есть ВСЕ теги (через отношение habtm)
Я хочу, чтобы найти статьи, имеет теги, указанные, например, теги = [ "tag1 "tag2", "тег" 3]
Было бы хорошо, чтобы все в SQL запросе. (Postgresql используется)
.похоже, что это будет хорошо, чтобы воспользоваться помощью PostGreSQL массивы
в настоящее время, я смотрю в этот подход:
select "articles".*,
(
select array(
select tags.name from tags
inner join articles_tags on articles_tags.tag_id = tags.id and articles_tags.article_id = articles.id
)
) as tags
FROM "articles"
Я пытаюсь сделать теги & & ARRAY [?] И передавать теги, но он не работает, потому что «теги не являются столбцом».
Возможно, вы можете порекомендовать элегантное решение для рельсов.
UPD
Похоже, это SQL делает то, что нужно, но это выглядит не очень Рельсы дружественный:
select articles.*
from articles
where articles.id in (
select t.id
from (
select articles.id, array_agg(articles_tags.tag_id) as tag_ids
from articles
inner join articles_tags on articles_tags.article_id = articles.id
group by articles.id
) as t
where t.tag_ids @> array[2,3]
)
Есть ли способ сделать это Rails путь?
Спасибо!
Вы уверены, что это работает? –
Это должно сработать. Я быстро проверил свои данные и вернул правильные результаты. – IngoAlbers
Но он может дать неправильный результат, например, если теги статьи ["tag1", "tag4", "tag5"], он все равно вернет эту статью. –