Вы можете использовать оператор объединения массивов.
things = Tag.find(1).items | Tag.find(2).items
Это создаст объект для каждого элемента для обоих тегов, что может быть слишком много в зависимости от того, что вы пытаетесь сделать. Если вам нужно что-то более масштабируемое, вы можете выполнить поиск в таблице соединений.
things = ItemTags.find_by_sql("
SELECT item_id, COUNT(tag_id) AS tag_count
FROM item_tags
WHERE tag_id IN (1, 2)
GROUP_BY item_id
HAVING tag_count = 2;
").map(&:item)
Только что написал это в браузере, так что это может быть совершенно неправильно. Кроме того, вероятно, есть способ сделать это с помощью поиска активных записей, который был бы лучше, чем find_by_sql.