如何按方法的结果排序

时间:2013-05-03 14:27:16

标签: ruby-on-rails

我在我的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方法的结果对艺术家的检索进行排序,以便编号最高的艺术家点出现在顶部。

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

1 个答案:

答案 0 :(得分:1)

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

进行排序
@artistsbyprovince = User.artists_by_province(province).sort_by{ |u| -u.total_votes }