diff options
Diffstat (limited to 'app/models/users_star_project.rb')
-rw-r--r-- | app/models/users_star_project.rb | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/app/models/users_star_project.rb b/app/models/users_star_project.rb index 9a514b82506..6cffc97822d 100644 --- a/app/models/users_star_project.rb +++ b/app/models/users_star_project.rb @@ -3,7 +3,7 @@ class UsersStarProject < ApplicationRecord include Sortable - belongs_to :project, counter_cache: :star_count + belongs_to :project belongs_to :user validates :user, presence: true @@ -12,6 +12,10 @@ class UsersStarProject < ApplicationRecord alias_attribute :starred_since, :created_at + after_create :increment_project_star_count + after_destroy :decrement_project_star_count + + scope :with_active_user, -> { joins(:user).merge(User.with_state(:active)) } scope :order_user_name_asc, -> { joins(:user).merge(User.order_name_asc) } scope :order_user_name_desc, -> { joins(:user).merge(User.order_name_desc) } scope :by_project, -> (project) { where(project_id: project.id) } @@ -35,4 +39,14 @@ class UsersStarProject < ApplicationRecord joins(:user).merge(User.search(query, use_minimum_char_limit: false)) end end + + private + + def increment_project_star_count + Project.update_counters(project, star_count: 1) if user.active? + end + + def decrement_project_star_count + Project.update_counters(project, star_count: -1) if user.active? + end end |