catstodon/app/models/favourite.rb
Eugen Rochko 5c42f47617
Fix records not being indexed sometimes (#12024)
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.
2019-10-01 01:19:11 +02:00

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