It's possible that after commit callbacks were not firing when exceptions occurred in the process. Also, the default Sidekiq strategy does not push indexing jobs immediately, which is not necessary and could be part of the issue too.
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| # == Schema Information
 | |
| #
 | |
| # Table name: favourites
 | |
| #
 | |
| #  id         :bigint(8)        not null, primary key
 | |
| #  created_at :datetime         not null
 | |
| #  updated_at :datetime         not null
 | |
| #  account_id :bigint(8)        not null
 | |
| #  status_id  :bigint(8)        not null
 | |
| #
 | |
| 
 | |
| class Favourite < ApplicationRecord
 | |
|   include Paginable
 | |
| 
 | |
|   update_index('statuses#status', :status)
 | |
| 
 | |
|   belongs_to :account, inverse_of: :favourites
 | |
|   belongs_to :status,  inverse_of: :favourites
 | |
| 
 | |
|   has_one :notification, as: :activity, dependent: :destroy
 | |
| 
 | |
|   validates :status_id, uniqueness: { scope: :account_id }
 | |
| 
 | |
|   before_validation do
 | |
|     self.status = status.reblog if status&.reblog?
 | |
|   end
 | |
| 
 | |
|   after_create :increment_cache_counters
 | |
|   after_destroy :decrement_cache_counters
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def increment_cache_counters
 | |
|     status&.increment_count!(:favourites_count)
 | |
|   end
 | |
| 
 | |
|   def decrement_cache_counters
 | |
|     return if association(:status).loaded? && (status.marked_for_destruction? || status.marked_for_mass_destruction?)
 | |
|     status&.decrement_count!(:favourites_count)
 | |
|   end
 | |
| end
 |