1

我在我的 Rails 应用程序中的 User.rb 模型上有一个方法,它根据用户对网站的各种贡献返回声誉分数。

   def total_votes
    answerkarma = AnswerVote.joins(:answer).where(answers: {user_id: self.id}).sum('value') 
    contributionkarma = Contribution.where(user_id: self.id).sum('value')

    answerkarma + contributionkarma
   end

在我想象中的艺术家控制器的索引操作中,有时我检索所有艺术家,有时我只检索那些按位置过滤的艺术家

 def index


     if params[:province_id]
     province = params[:province_id]
     province = province.to_i
     @artistsbyprovince = User.artists_by_province(province)

     else

     @artists = User.where(:onionpealer => true)

     end


   end 

如果我按位置过滤,用户模型会调用此范围方法

   scope :artists_by_province, lambda {|province|
      joins(:contact).
      where( contacts: {province_id: province},
             users: {onionpealer: true})
      }

然而,我想做的是,在这两种情况下(无论是按位置过滤还是检索所有用户)都是通过 total_votes 方法的结果对艺术家的检索进行排序,以便出现点数最高的艺术家在顶部。

你能建议我怎么做吗?先感谢您。

4

1 回答 1

1

如果不注意错误的查询架构,可以通过 ruby​​ 进行排序array#sort_by

@artistsbyprovince = User.artists_by_province(province).sort_by{ |u| -u.total_votes }
于 2013-05-03T14:35:26.817 回答