module PunchingBag::ActiveRecord::ClassMethods
Constants
- DEFAULT_DIRECTION
- DIRECTIONS
Public Instance Methods
most_hit(since = nil, limit = 5)
click to toggle source
Note: this method will only return items if they have 1 or more hits
# File lib/punching_bag/acts_as_punchable.rb, line 11 def most_hit(since = nil, limit = 5) query = joins(:punches).group(Punch.arel_table[:punchable_type], Punch.arel_table[:punchable_id], arel_table[primary_key]) query = query.where('punches.average_time >= ?', since) unless since.nil? query.reorder(Arel.sql('SUM(punches.hits) DESC')).limit(limit) end
sort_by_popularity(direction = DEFAULT_DIRECTION)
click to toggle source
Note: this method will return all items with 0 or more hits direction: Symbol (:asc, or :desc)
# File lib/punching_bag/acts_as_punchable.rb, line 19 def sort_by_popularity(direction = DEFAULT_DIRECTION) dir = DIRECTIONS.fetch( direction.to_s.downcase.to_sym, DIRECTIONS[DEFAULT_DIRECTION] ) query = joins( arel_table.join( Punch.arel_table, Arel::Nodes::OuterJoin ).on( Punch.arel_table[:punchable_id].eq( arel_table[primary_key] ).and( Punch.arel_table[:punchable_type].eq(name) ) ).join_sources.first ) query = query.group(arel_table[primary_key]) query.reorder(Arel.sql("SUM(punches.hits) #{dir}")) end