diff --git a/ruby/lib/jam_ruby/models/band.rb b/ruby/lib/jam_ruby/models/band.rb index 97200e21a..34ea63198 100644 --- a/ruby/lib/jam_ruby/models/band.rb +++ b/ruby/lib/jam_ruby/models/band.rb @@ -36,6 +36,9 @@ module JamRuby has_many :music_sessions, :class_name => "JamRuby::MusicSession", :foreign_key => "band_id" has_many :music_session_history, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "band_id", :inverse_of => :band + include Geokit::ActsAsMappable::Glue unless defined?(acts_as_mappable) + acts_as_mappable + def liker_count return self.likers.size end diff --git a/ruby/lib/jam_ruby/models/search.rb b/ruby/lib/jam_ruby/models/search.rb index 3ab843f4a..dc68d1350 100644 --- a/ruby/lib/jam_ruby/models/search.rb +++ b/ruby/lib/jam_ruby/models/search.rb @@ -133,9 +133,7 @@ module JamRuby end rel = rel.select(sel_str) - perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min - page = [params[:page].to_i, 1].max - rel = rel.paginate(:page => page, :per_page => perpage) + rel, page = self.relation_pagination(rel, params) rel = rel.includes([:instruments, :followings, :friends]) objs = rel.all @@ -144,6 +142,12 @@ module JamRuby srch.musician_results_for_user(objs, current_user) end + def self.relation_pagination(rel, params) + perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min + page = [params[:page].to_i, 1].max + [rel.paginate(:page => page, :per_page => perpage), page] + end + RESULT_FOLLOW = :follows RESULT_FRIEND = :friends @@ -243,10 +247,9 @@ module JamRuby def self.band_search(params={}, current_user=nil) rel = Band.scoped - # rel = Arel::Table.new(:bands) unless (genre = params[:genre]).blank? - rel = Band.joins("RIGHT JOIN band_genres AS bgenres ON bgenres.band_id = bands.id") + rel = Band.joins("RIGHT JOIN bands_genres AS bgenres ON bgenres.band_id = bands.id") .where(['bgenres.genre_id = ? AND bands.id IS NOT NULL', genre]) end @@ -256,26 +259,23 @@ module JamRuby case ordering = self.order_param(params) when :plays # FIXME: double counting? sel_str = "COUNT(records)+COUNT(sessions) AS play_count, #{sel_str}" - rel = rel.joins("LEFT JOIN music_sessions AS sessions ON sessions.user_id = users.id") - .joins("LEFT JOIN recordings AS records ON records.owner_id = users.id") - .group("users.id") - .order("play_count DESC, users.created_at DESC") + rel = rel.joins("LEFT JOIN music_sessions AS sessions ON sessions.band_id = bands.id") + .joins("LEFT JOIN recordings AS records ON records.band_id = bands.id") + .group("bands.id") + .order("play_count DESC, bands.created_at DESC") when :followed sel_str = "COUNT(follows) AS search_follow_count, #{sel_str}" rel = rel.joins("LEFT JOIN bands_followers AS follows ON follows.band_id = bands.id") .group("bands.id") .order("COUNT(follows) DESC, bands.created_at DESC") when :playing - rel = rel.joins("LEFT JOIN connections ON connections.user_id = users.id") - .where(['connections.music_session_id IS NOT NULL AND connections.aasm_state != ?', - 'expired']) - .order("users.created_at DESC") + rel = rel.joins("LEFT JOIN music_sessions_history AS msh ON msh.band_id = bands.id") + .where('msh.music_session_id IS NOT NULL AND msh.session_removed_at IS NULL') + .order("bands.created_at DESC") end rel = rel.select(sel_str) - perpage = [(params[:per_page] || M_PER_PAGE).to_i, 100].min - page = [params[:page].to_i, 1].max - rel = rel.paginate(:page => page, :per_page => perpage) + rel, page = self.relation_pagination(rel, params) rel = rel.includes([:users]) objs = rel.all @@ -294,8 +294,8 @@ module JamRuby results.each do |bb| counters = { } counters[COUNT_FOLLOW] = BandFollowing.where(:band_id => bb.id).count - # counters[COUNT_RECORD] = ClaimedRecording.where(:band_id => bb.id).count - # counters[COUNT_SESSION] = MusicSession.where(:band_id => bb.id).count + counters[COUNT_RECORD] = Recording.where(:band_id => bb.id).count + counters[COUNT_SESSION] = MusicSession.where(:band_id => bb.id).count @user_counters[bb.id] << counters end