HOWTO ранжировать предметы по балансу в Ruby на рельсах - PullRequest
11 голосов
/ 11 мая 2010

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

Ответы [ 4 ]

20 голосов
/ 11 мая 2010

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

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

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

10 голосов
/ 24 октября 2014

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

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

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

5 голосов
/ 12 мая 2010

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

Положение объекта в базе данных

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

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

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

3 голосов
/ 11 мая 2010

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

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

Редактировать: , если balance не является атрибутом ...

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

@user = User.first
@rank = User.all(:order => "balance").index(@user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...