vrfs-884: got band filter specs to work

This commit is contained in:
Jonathan Kolyer 2013-12-09 11:41:35 -06:00
parent 4c804d2f94
commit 380e264a9a
2 changed files with 21 additions and 18 deletions

View File

@ -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

View File

@ -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