Вы можете сделать
Article.includes(:category_relationships => :categories).find(1)
, что уменьшит это до 3 запросов (1 для каждой таблицы).Для производительности также убедитесь, что ваши внешние ключи имеют индекс.
Но в целом мне любопытно, почему сущность "category_relationships" вообще существует, и почему это не ситуация типа has_and_belongs_to?
Обновлено
В соответствии с измененным вопросом вы все равно можете сделать
Category.includes(:article_relationships => :articles).first
Если вы смотрите консоль (или хвостовой журнал / разработка)вы увидите, что когда вы вызываете ассоциации, он попадет в кешированные значения, и вы золотые.
Но мне все еще любопытно, почему вы не используете ассоциацию «Имеет и принадлежит многим».