]> cat aescling's git repositories - mastodon.git/commit
Introduce ApplicationController#cache_collection_paginated_by_id (#14677)
authorAkihiko Odaki <nekomanma@pixiv.co.jp>
Fri, 28 Aug 2020 10:31:56 +0000 (19:31 +0900)
committerGitHub <noreply@github.com>
Fri, 28 Aug 2020 10:31:56 +0000 (12:31 +0200)
commit64ef37b89de806f49cc59e011aa0ee2039c82c46
tree6d6349db6a0928bcd3aa875dd516bd0b19060022
parentb63ede5005d33b52266650ec716d345f166e2df0
Introduce ApplicationController#cache_collection_paginated_by_id (#14677)

* Replace incorrect use of distinct with group

Some uses of ActiveRecord::QueryMethods#distinct pass field names but they
are incorrect for the current version of Rails.

ActiveRecord::QueryMethods#group provides the expected behavior and
benefits performance. See commit 6da24aad4cafdef8d8a2c92bac2002a5fc2fe9c8.

* Introduce ApplicationController#cache_collection_paginated_by_id

ApplicationController#cache_collection_paginated_by_id fuses
ApplicationController#cache_collection and Paginable.paginate_by_id.

An advantage of this method is that it prevents from modifying scope which
Paginable.paginate_by_id may provide.
ApplicationController#cache_collection always return an array and there
is no possibility of the scope modification. It is also clear for a
programmer, considering the implication of "cache".

This method can also emit more efficient queries by using
Cacheable.cache_ids before calling Paginable.paginate_by_id.
app/controllers/accounts_controller.rb
app/controllers/activitypub/outboxes_controller.rb
app/controllers/api/v1/accounts/statuses_controller.rb
app/controllers/api/v1/notifications_controller.rb
app/controllers/api/v1/timelines/public_controller.rb
app/controllers/api/v1/timelines/tag_controller.rb
app/controllers/concerns/cache_concern.rb