ActiveRecord просто не такой умный.Позвонив по номеру
User.joins(:role).size
, вы сообщаете это INNER JOIN
таблице roles
, а затем проверяете счет.
Он использует INNER JOIN
даже для подсчета, потому что он недостаточно умен, чтобы выяснить, что, поскольку у вас есть внешний ключ И , столбец не может обнуляться И для таблицы roles
нет условий, объединение на самом деле не нужно.
Вызов
User.includes(:role).size
не создает объединение, поскольку вы не говорите ActiveRecord о загрузке всехПользователи, у которых определена роль, и она использует левые соединения или отдельные запросы для загрузки ролей.