Rails范围以信誉评分

时间:2017-01-31 03:12:44

标签: ruby-on-rails ruby-on-rails-4 scope filtering

我有一个用户表,我保持每个用户的声誉分数。声誉分数是2个因素的综合得分:

  1. 用户项目的总跟随者(他/她创建的项目)

  2. 对用户任务(他/她创建的任务)的总投票数

  3. 我的目标是允许用户按最近(标准索引操作)或信誉最多的用户过滤用户。哪个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
    

1 个答案:

答案 0 :(得分:3)

虽然可以在SQL中动态执行此操作,但您确实希望:

为此处显示的两个计数项目中的每一项添加counter cache;这会将这些列添加为Rails将为您维护的计算列,然后针对您的范围执行此操作:

User.order(User.arel_table[:project_follower_count] + User.arel_table[:task_vote_count]).reverse_order

(或类似的东西)

或者,您可以在RDBMS上加倍,并构建索引以便即时处理。