HOWTO ранжирует позиции по балансу в Ruby on rails

Я реализую систему ставок, и каждый пользователь имеет баланс, как я могу найти ранг пользователя, используя методы activerecord? спасибо за вашу помощь.

Ответ 1

Чтобы получить ранг пользователя,

Users.all(:order => "balance").index(a_particular_user)

Это должно дать вам индекс (ранг) определенного пользователя в массиве всех пользователей (отсортированный по балансу).

Ответ 2

Несколько более эффективное решение, если у вас много пользователей:

Users.order(:balance).pluck(:id).index(a_particular_user_id)`

Таким образом, ваше приложение извлекает n целых идентификаторов вместо вытягивания и создания экземпляров n целых User записей/объектов. Возможно, на порядок быстрее.

Ответ 3

несколько дней назад я задал тот же вопрос

Позиция объекта в базе данных

Мое решение было таким же, как предложил @Drew Johnson (User.all.index current_user). Но мне нужно "решение для запросов", а @Vlad Zloteanu дал мне отличную идею:

User.count(:order => "balance", :conditions => ['balance < (?)', current_user.balance])

это быстрое решение запросов для больших таблиц данных.

Ответ 4

Если я понял, чего вы хотите, вам просто нужно заказать пользователей по балансу

User.all(:order => "balance")

Изменить:, если balance не является атрибутом...

Редактировать # 2: после просмотра ответа Дрю Джонсона. Я понял, что неправильно понял ваш вопрос. По его словам, вы можете использовать метод index для выполнения того, что вы хотите.

@user = User.first
@rank = User.all(:order => "balance").index(@user)