Class: HasHelpers::RecentlyViewed

Inherits:
ActiveRecord::Base show all
Defined in:
app/models/has_helpers/recently_viewed.rb

Instance Method Summary collapse

Methods included from ActiveRecord::Base

set_renderable_proc, #to_renderable, to_renderable_proc, #to_service

Instance Method Details

#create_blockObject



14
15
16
17
18
19
# File 'app/models/has_helpers/recently_viewed.rb', line 14

def create_block
  associated_object_foreign_key = owner.class.base_class.name.demodulize.foreign_key
  updated_count = ::HasHelpers::RecentlyViewed.where(created_by_id: created_by_id).where(associated_object_foreign_key => owner.id).update_all(updated_at: Time.zone.now)

  throw(:abort) if updated_count != 0
end

#limit_lastObject



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/models/has_helpers/recently_viewed.rb', line 21

def limit_last
  related_recently_vieweds = ::HasHelpers::RecentlyViewed.where(created_by_id: created_by_id).where.not(owner.class.base_class.name.demodulize.foreign_key => nil)

  # For STI models scope the RecentlyViewed records to the specific owner type. This is done by simply adding an inner join.
  if owner.class.base_class != owner.class
    related_recently_vieweds = related_recently_vieweds.
                               joins(owner.class.base_class.name.demodulize.underscore.to_sym).
                               where(owner.class.base_class.name.demodulize.tableize => { type: owner.class.name })
  end

  # Delete the least recently updated records to bring the total number down to the maximum allowed.
  related_recently_vieweds.order("updated_at DESC").offset(::HasHelpers::HISTORY_MAX).each(&:delete)
end