Извините, еще одна вещь, которую стоит попробовать.
Я не уверен, что вы можете написать это в ActiveRecord, и довольно сложно преобразовать его в чистый AREL, так что вот обходной путь, который может помочьвас нет.
Post.find_by_sql(
"
select * from posts where id in (
SELECT cp1.post_id FROM JOIN categories_posts cp1
INNER JOIN categories_posts cp2 ON cp1.post_id = cp2.post_id
where cp1.category_id = 1 and cp2.category_id = 2
)
"
)
Другая вещь, которую следует учитывать, это подкачка страниц, вы можете попробовать добавить что-то вроде этого, чтобы посмотреть только раздел ваших сообщений:
and cp1.post_id between 1 and 10000
(проверено наOracle, могут быть некоторые синтаксические различия)