我有一个用户表,我保持每个用户的声誉分数。声誉分数是2个因素的综合得分:
用户项目的总跟随者(他/她创建的项目)
对用户任务(他/她创建的任务)的总投票数
我的目标是允许用户按最近(标准索引操作)或信誉最多的用户过滤用户。哪个Rails范围会按照“最高得分”的顺序返回按此“总信誉得分”排序的用户列表? thx,
我的代码如下:
User.RB模型
def total_reputation_score
project_follower_count + task_vote_count
end
scope :by_reputation, -> { #HOW DO I CREATE THIS SCOPE? }
用户控制器
def index
@users = User.text_search(params[:query]).paginate(page: params[:page], :per_page => 12)
end
def most_reputation
@users = policy_scope(User)
@users = @users.
text_search(params[:query]).
by_reputation.
paginate(page: params[:page], :per_page => 12)
render :index
end
答案 0 :(得分:3)
虽然可以在SQL中动态执行此操作,但您确实希望:
为此处显示的两个计数项目中的每一项添加counter cache;这会将这些列添加为Rails将为您维护的计算列,然后针对您的范围执行此操作:
User.order(User.arel_table[:project_follower_count] + User.arel_table[:task_vote_count]).reverse_order
(或类似的东西)
或者,您可以在RDBMS上加倍,并构建索引以便即时处理。