diff --git a/app/models/pool.rb b/app/models/pool.rb index 8d7a562bd..dae48d7c6 100644 --- a/app/models/pool.rb +++ b/app/models/pool.rb @@ -84,7 +84,7 @@ class Pool < ApplicationRecord when "created_at" q = q.order("pools.created_at desc") when "post_count" - q = q.order("pools.post_count desc").default_order + q = q.order(Arel.sql("cardinality(post_ids) desc")).default_order else q = q.apply_default_order(params) end @@ -207,7 +207,7 @@ class Pool < ApplicationRecord return if is_deleted? with_lock do - update(post_ids: post_ids + [post.id], post_count: post_count + 1) + update(post_ids: post_ids + [post.id]) post.add_pool!(self, true) end end @@ -218,7 +218,7 @@ class Pool < ApplicationRecord with_lock do reload - update(post_ids: post_ids - [post.id], post_count: post_count - 1) + update(post_ids: post_ids - [post.id]) post.remove_pool!(self) end end @@ -255,7 +255,6 @@ class Pool < ApplicationRecord end normalize_post_ids - self.post_count = post_ids.size end def synchronize! @@ -263,6 +262,10 @@ class Pool < ApplicationRecord save if will_save_change_to_post_ids? end + def post_count + post_ids.size + end + def first_post?(post_id) page_number(post_id) == 1 end @@ -297,7 +300,7 @@ class Pool < ApplicationRecord end def method_attributes - super + [:creator_name] + super + [:creator_name, :post_count] end def update_category_pseudo_tags_for_posts_async diff --git a/db/migrate/20181108205842_drop_post_count_from_pools.rb b/db/migrate/20181108205842_drop_post_count_from_pools.rb new file mode 100644 index 000000000..8e522b0d5 --- /dev/null +++ b/db/migrate/20181108205842_drop_post_count_from_pools.rb @@ -0,0 +1,10 @@ +class DropPostCountFromPools < ActiveRecord::Migration[5.2] + def up + remove_column :pools, :post_count + end + + def down + add_column :pools, :post_count, :integer, default: 0, null: false + Pool.update_all("post_count = cardinality(post_ids)") + end +end diff --git a/db/structure.sql b/db/structure.sql index caf555201..7cdd77c0c 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -2564,7 +2564,6 @@ CREATE TABLE public.pools ( description text, is_active boolean DEFAULT true NOT NULL, post_ids integer[] DEFAULT '{}'::integer[] NOT NULL, - post_count integer DEFAULT 0 NOT NULL, is_deleted boolean DEFAULT false NOT NULL, created_at timestamp without time zone, updated_at timestamp without time zone, @@ -7579,6 +7578,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20180912185624'), ('20180913184128'), ('20180916002448'), -('20181108162204'); +('20181108162204'), +('20181108205842');