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方法的結果,使得具有最高點數的藝術家出現在頂部。
你能建議我該怎麼做。先謝謝你。
謝謝,但一個問題做了。它以最低票數迴歸用戶。他們應該在頂部。另外,當你說「如果不注意錯誤的查詢架構」,你的意思是什麼,我不明白。 – Leahcim 2013-05-03 14:44:25
更新我的答案,以改變排序方向 – MikDiet 2013-05-03 14:46:45
我的意思是,如果你有很多用戶,比如說說10000 ++,那麼從數據庫中提取它們並在ruby中進行排序是非常耗時和耗費內存的操作。正確的方法是在數據庫中緩存投票並在sql查詢中進行排序。 – MikDiet 2013-05-03 14:49:14