Skip to content
Snippets Groups Projects
favourite.rb 1.08 KiB
Newer Older
  • Learn to ignore specific revisions
  • yhirano's avatar
    yhirano committed
    # == Schema Information
    #
    # Table name: favourites
    #
    
    #  id         :bigint(8)        not null, primary key
    
    yhirano's avatar
    yhirano committed
    #  created_at :datetime         not null
    #  updated_at :datetime         not null
    
    #  account_id :bigint(8)        not null
    #  status_id  :bigint(8)        not null
    
    yhirano's avatar
    yhirano committed
    #
    
    Eugen Rochko's avatar
    Eugen Rochko committed
    class Favourite < ApplicationRecord
    
      update_index('statuses#status', :status) if Chewy.enabled?
    
    
      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 }
    
    
        self.status = status.reblog if status&.reblog?
    
    
      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)