Невозможно понять, что происходит с отдельным методом Active Record - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь выбрать отдельные записи из таблицы моделей на основе user_id. Я попытался написать это несколькими возможными способами. Я не понимаю, почему использование Different с Pluck [2] возвращает правильное значение, тогда как только Different [3], похоже, не работает вообще. Что мне здесь не хватает?

Использование 'rails', '~> 5.2.3'.

[1] pry(main)> Model.select(:user_id).distinct.count
   (2967.7ms)  SELECT COUNT(DISTINCT "models"."user_id") FROM "models"
=> 11432

[2] pry(main)> Model.distinct(:user_id).pluck(:user_id).count
   (690.6ms)  SELECT DISTINCT "models"."user_id" FROM "models"
=> 11432

[3] pry(main)> Model.distinct(:user_id).count
   (1076.7ms)  SELECT COUNT(DISTINCT "models"."id") FROM "models"
=> 2531300

1 Ответ

0 голосов
/ 14 апреля 2020

1) Это правильный способ подсчета количества различных user_id значений в базе данных с использованием языка запросов ActiveRecord.

2) Обратите внимание, что pluck уже выполняется запрос к базе данных. Это означает, что он загружает все записи в память и затем подсчитывает количество элементов в этом массиве.

3) Аргумент для distinct - это не имя столбца, а логическое значение. Это означает, что вызов distinct(:user_id) в основном аналогичен вызову distinct(true) и true default. Это означает, что

Model.distinct(:user_id).count

совпадает с

Model.distinct.count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...