Сортировать по запросу в Mongoid не удалось заказать - PullRequest
0 голосов
/ 04 января 2012

Пытаясь создать хороший упорядоченный список, у меня есть метод, который, как я знаю, работает в классе участников

def countries_ive_drunk
    had_drinks.map {|drink| drink.beer.country }
  end

  def countries_ive_drunk_count
    countries_ive_drunk.count
  end

Зная, что это работает выше. Я создал новый класс, который хотел бы получить список участников и упорядочить его по country_ive_drunk_count

class Drinkers
  include Mongoid::Document

  def self.top_ten_drinkers
    Participant.order_by([[:countries_ive_drunk_count, :asc]]).limit(10)
  end
end

но когда это передается в мой файл haml:

get '/' do
  @topdrinkers = Drinkers.top_ten_drinkers

  haml :index
end

Тогда он не упорядочен правильно. и приведенный ниже код приводит к именам с числом рядом с ними. Счетчик не asc или desc, а просто в случайном порядке (вероятно, порядок, в который пользователь был введен в mongodb

  %ul        
    - @topdrinkers.all.each do |participant|
      %li
        = "#{participant.countries_ive_drunk_count} - #{participant.name}"

Я что-то упускаю из виду (будь любезен, я впервые использую рубин, монгодб, монгоид, хамл ... бросаюсь в глубокий конец!)

1 Ответ

1 голос
/ 04 января 2012

Когда вы используете order_by, desc или asc в Mongoid, он передает его в MongoDB для сортировки на сервере базы данных и ищет поле с именем countries_ive_drunk_count, которого не существует. Вам нужно будет хранить данные в MongoDB, чтобы они могли сортировать все.

Вы не перечислили большую часть своей схемы, но вам следует рассмотреть использование группового запроса, чтобы выяснить, кто из лучших пьющих.

...