diff --git a/app/controllers/admin/statuses_controller.rb b/app/controllers/admin/statuses_controller.rb index aeadb35e7a6..282626dc712 100644 --- a/app/controllers/admin/statuses_controller.rb +++ b/app/controllers/admin/statuses_controller.rb @@ -62,7 +62,11 @@ module Admin end def set_statuses - @statuses = Admin::StatusFilter.new(@account, filter_params).results.preload(:application, :preloadable_poll, :media_attachments, active_mentions: :account, reblog: [:account, :application, :preloadable_poll, :media_attachments, active_mentions: :account]).page(params[:page]).per(PER_PAGE) + @statuses = Admin::StatusFilter.new(@account, {}).results.preload(*preload_columns, reblog: [:account, *preload_columns]).page(params[:page]).per(PER_PAGE) + end + + def preload_columns + [:application, :preloadable_poll, :media_attachments, active_mentions: :account] end def filter_params diff --git a/app/models/status.rb b/app/models/status.rb index e933c92cae0..99d1f8d2f29 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -45,6 +45,19 @@ class Status < ApplicationRecord include Status::Visibility include Status::InteractionPolicyConcern + CACHEABLE_ASSOCIATIONS = [ + :application, + :conversation, + :media_attachments, + :preloadable_poll, + :status_stat, + :tags, + account: [:account_stat, user: :role], + active_mentions: :account, + preview_cards_status: { preview_card: { author_account: [:account_stat, user: :role] } }, + quote: { status: { account: [:account_stat, user: :role] } }, + ].freeze + MEDIA_ATTACHMENTS_LIMIT = 4 rate_limit by: :account, family: :statuses @@ -157,29 +170,11 @@ class Status < ApplicationRecord # the `dependent: destroy` callbacks remove relevant records before_destroy :unlink_from_conversations!, prepend: true - cache_associated :application, - :media_attachments, - :conversation, - :status_stat, - :tags, - :preloadable_poll, - quote: { status: { account: [:account_stat, user: :role] } }, - preview_cards_status: { preview_card: { author_account: [:account_stat, user: :role] } }, - account: [:account_stat, user: :role], - active_mentions: :account, - reblog: [ - :application, - :media_attachments, - :conversation, - :status_stat, - :tags, - :preloadable_poll, - quote: { status: { account: [:account_stat, user: :role] } }, - preview_cards_status: { preview_card: { author_account: [:account_stat, user: :role] } }, - account: [:account_stat, user: :role], - active_mentions: :account, - ], - thread: :account + cache_associated( + *CACHEABLE_ASSOCIATIONS, + reblog: [*CACHEABLE_ASSOCIATIONS], + thread: :account + ) delegate :domain, :indexable?, to: :account, prefix: true