尝试创建一个很好的有序列表,我有参与者类中我知道的工作方法
def countries_ive_drunk
had_drinks.map {|drink| drink.beer.country }
end
def countries_ive_drunk_count
countries_ive_drunk.count
end
知道以上这些工作。我创建了一个新类,希望获得参与者列表并通过countries_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}"
我是否遗漏了任何明显的东西(我第一次使用红宝石,mongodb,mongoid,haml ......让自己陷入深渊!)
答案 0 :(得分:1)
当您在Mongoid中使用order_by
,desc
或asc
时,它会将其传递给MongoDB以在数据库服务器上进行排序,并且它正在寻找名为countries_ive_drunk_count
的字段,这是不存在的。您需要将数据存储在MongoDB中,以便能够对所有内容进行排序。
您没有列出很多架构,但是您应该考虑使用群组查询来确定最佳饮酒者。