Как выполнять объединения в подзапросах в AREL в Rails

У меня есть простая модель

class User
    has_many :logs


class Logs

связанный обычным способом с помощью внешнего ключа logs.user_id. Я пытаюсь сделать следующее с помощью Arel, и в соответствии с документом Arel он должен работать.

u_t = Arel::Table::new :users
l_t = Arel::Table::new :logs

counts = l_t.
    group(l_t[:user_id]).
    project(
        l_t[:user_id].as("user_id"),
        l_t[:user_id].count.as("count_all")
    )

l_t.joins(counts).on(l_t[:id].eq(counts[:user_id]))

Когда я делаю это, я получаю сообщение об ошибке

TypeError: Cannot visit Arel::SelectManager

Однако автор Arel явно предлагает, что Arel может делать такие вещи.

Пожалуйста, не пишите ответы о том, как я могу достичь одного и того же запроса с raw sql, другим типом запроса Arel и т.д. Это шаблон, который меня интересует не для конкретных результатов этого запроса.

Ответ 1

Вы можете использовать join_sources для извлечения Arel:: Nodes:: Join из экземпляра Arel:: SelectManager и передать это для объединения

Используя ваш пример:

l_t.joins(counts.join_sources).on(l_t[:id].eq(counts[:user_id]))