У меня есть метод на моей модели User.rb в моем приложении Rails, который возвращает оценку репутации на основе различных вкладов пользователя на сайт.Как отсортировать результаты по методу
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
Обновите мой ответ, чтобы изменить направление сортировки – MikDiet
Я имею в виду, если у вас много пользователей, скажем 10000 ++, извлечение их из db и упорядочение по голосам в ruby будет очень длинным, а операционная память будет работать. Правильный путь - кеширование голосов в базе данных и упорядочение в sql-запросе. – MikDiet