One aproach to make the randomness work with kaminari

This commit is contained in:
iagirre
2017-11-15 08:56:31 +01:00
parent 9812efcd85
commit 7f0e447e0f
2 changed files with 15 additions and 6 deletions

View File

@@ -28,8 +28,8 @@ module Budgets
respond_to :html, :js respond_to :html, :js
def index def index
@investments = @investments.apply_filters_and_search(@budget, params, @current_filter) @investments = investments.page(params[:page]).per(10).for_render
.send("sort_by_#{@current_order}").page(params[:page]).per(10).for_render
@investment_ids = @investments.pluck(:id) @investment_ids = @investments.pluck(:id)
load_investment_votes(@investments) load_investment_votes(@investments)
@tag_cloud = tag_cloud @tag_cloud = tag_cloud
@@ -94,9 +94,7 @@ module Budgets
def set_random_seed def set_random_seed
if params[:order] == 'random' || params[:order].blank? if params[:order] == 'random' || params[:order].blank?
params[:random_seed] ||= rand(99) / 100.0 params[:random_seed] ||= rand(9)
seed = Float(params[:random_seed]) rescue 0
Budget::Investment.connection.execute("select setseed(#{seed})")
else else
params[:random_seed] = nil params[:random_seed] = nil
end end
@@ -131,6 +129,17 @@ module Budgets
TagCloud.new(Budget::Investment, params[:search]) TagCloud.new(Budget::Investment, params[:search])
end end
def investments
case @current_order
when 'random'
@investments.apply_filters_and_search(@budget, params, @current_filter)
.send("sort_by_#{@current_order}", params[:random_seed])
else
@investments.apply_filters_and_search(@budget, params, @current_filter)
.send("sort_by_#{@current_order}")
end
end
end end
end end

View File

@@ -43,7 +43,7 @@ class Budget
scope :sort_by_confidence_score, -> { reorder(confidence_score: :desc, id: :desc) } scope :sort_by_confidence_score, -> { reorder(confidence_score: :desc, id: :desc) }
scope :sort_by_ballots, -> { reorder(ballot_lines_count: :desc, id: :desc) } scope :sort_by_ballots, -> { reorder(ballot_lines_count: :desc, id: :desc) }
scope :sort_by_price, -> { reorder(price: :desc, confidence_score: :desc, id: :desc) } scope :sort_by_price, -> { reorder(price: :desc, confidence_score: :desc, id: :desc) }
scope :sort_by_random, -> { reorder("RANDOM()") } scope :sort_by_random, ->(seed) { reorder("budget_investments.id % #{seed}, budget_investments.id") }
scope :valuation_open, -> { where(valuation_finished: false) } scope :valuation_open, -> { where(valuation_finished: false) }
scope :without_admin, -> { valuation_open.where(administrator_id: nil) } scope :without_admin, -> { valuation_open.where(administrator_id: nil) }