Ответ 1
Запросы Rails действуют как массивы, поэтому .uniq
дает тот же результат, что и .distinct
, но
-
.distinct
- метод запроса SQL -
.uniq
- метод массива
Примечание: в Rails 5+ Relation#uniq
устарела и рекомендуется вместо этого использовать Relation#distinct
Different. Смотрите http://edgeguides.rubyonrails.org/5_0_release_notes.html#active-record-deprecations
Подсказка:
Использование .includes
перед вызовом .uniq/.distinct
может замедлить или ускорить ваше приложение, потому что
-
uniq
не будет вызывать дополнительный SQL-запрос -
distinct
будет делать
Но оба результата будут одинаковыми
Пример:
users = User.includes(:posts)
puts users
# First sql query for includes
users.uniq
# No sql query! (here you speed up you app)
users.distinct
# Second distinct sql query! (here you slow down your app)
Это может быть полезно для создания приложения
Подсказка:
То же самое работает для
-
.size
vs.count
; -
present?
против..exists?
-
pluck
противmap