У меня есть таблица пользователей, и у меня есть рейтинг репутации для каждого пользователя. Счет репутации является комбинированный оценка от 2 факторов:Rails scope, который заказывает пользователей по оценке репутации
полных последователей по проектам пользователей (проекты он/она создала)
общего количества голосов на задачи пользователей (задачи, которые он/она создала)
Моя цель - разрешить пользователям фильтровать пользователей самым последним (стандартное действие индекса) или пользователями с наибольшей репутацией. Какая область Rails вернет список пользователей, заказанных по этой «общей оценке репутации», в порядке наивысшего балла до самого низкого? ТНХ,
Мой код выглядит следующим образом:
User.RB Model
def total_reputation_score
project_follower_count + task_vote_count
end
scope :by_reputation, -> { #HOW DO I CREATE THIS SCOPE? }
контроллер
Пользователи
def index
@users = User.text_search(params[:query]).paginate(page: params[:page], :per_page => 12)
end
def most_reputation
@users = policy_scope(User)
@users = @users.
text_search(params[:query]).
by_reputation.
paginate(page: params[:page], :per_page => 12)
render :index
end
спасибо corey - так, чтобы убедиться, что я понимаю ... это просто вопрос добавления нового целочисленного поля в таблицу Users для project_follower_count, а также для task_vote_count. Затем, когда у меня есть те, которые я могу просто сделать: scope: by_reputation, -> {User.order (User.arel_table [: project_follower_count] + User.arel_table [: task_vote_count] .reverse_order} – BB500
- это правильно, или мне даже не нужно масштаб больше? – BB500
Также я читаю здесь (и еще пару других мест), что встречные тайники не подходят для многих-многих отношений. Мои последователи и подсчет голосов и т. Д. Связаны друг с другом has_many -> через отношения. Можете ли вы использовать счетчик кеша со многими? https://coderwall.com/p/muvy9w/forget-counter-cache-for-many-to-many-associations-in-rails – BB500