我在我的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方法的结果对艺术家的检索进行排序,以便编号最高的艺术家点出现在顶部。
你能建议我怎么做。先感谢您。
答案 0 :(得分:1)
如果不注意错误的查询架构,可以通过ruby array#sort_by
@artistsbyprovince = User.artists_by_province(province).sort_by{ |u| -u.total_votes }