diff --git a/app/models/community_user.rb b/app/models/community_user.rb index 43e8fa1e3..a62926dcc 100644 --- a/app/models/community_user.rb +++ b/app/models/community_user.rb @@ -24,11 +24,6 @@ def suspended? false end - # All undeleted posts on this community by this user. - def post_count - Post.unscoped.where(community_id: community_id).where(user: user).undeleted.count - end - # Calculation functions for privilege scores # These are quite expensive, so we'll cache them for a while def post_score diff --git a/app/models/post.rb b/app/models/post.rb index 882f1f399..54d1c1e5b 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -25,6 +25,7 @@ class Post < ApplicationRecord has_many :reactions counter_culture :parent, column_name: proc { |model| model.deleted? ? nil : 'answer_count' } + counter_culture [:user, :community_user], column_name: proc { |model| model.deleted? ? nil : 'post_count' } serialize :tags_cache, Array diff --git a/db/migrate/20241020193053_add_post_count_to_community_users.rb b/db/migrate/20241020193053_add_post_count_to_community_users.rb new file mode 100644 index 000000000..a6c54aa17 --- /dev/null +++ b/db/migrate/20241020193053_add_post_count_to_community_users.rb @@ -0,0 +1,5 @@ +class AddPostCountToCommunityUsers < ActiveRecord::Migration[7.0] + def change + add_column :community_users, :post_count, :integer, default: 0, null: false + end +end diff --git a/db/schema.rb b/db/schema.rb index baac35e3e..d71e83045 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_04_05_113618) do +ActiveRecord::Schema[7.0].define(version: 2024_10_20_193053) do create_table "abilities", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t.bigint "community_id" t.string "name" @@ -226,6 +226,7 @@ t.boolean "deleted", default: false, null: false t.datetime "deleted_at", precision: nil t.bigint "deleted_by_id" + t.integer "post_count", default: 0, null: false t.index ["community_id"], name: "index_community_users_on_community_id" t.index ["deleted_by_id"], name: "index_community_users_on_deleted_by_id" t.index ["user_id"], name: "index_community_users_on_user_id"