Я реализую систему ставок, и каждый пользователь имеет баланс, как я могу найти ранг пользователя, используя методы activerecord? спасибо за вашу помощь.
HOWTO ранжирует позиции по балансу в Ruby on rails
Ответ 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)