Rails 3.2中的限制方法问题和散列排序

时间:2012-02-24 11:45:01

标签: ruby-on-rails-3

我有一个城市数据库,其中包含has_many:BUSINESS

我想显示20个城市的列表。这20个城市应该是业务最多的城市。只有少于20个城市至少有一个企业,我才会将居民最多的城市添加到20个城市的列表中。由于城市是由我的数据库中的居民订购的,所以在这种情况下,我可以简单地用id来取第一个。

我的查询现在是:

popularcities = City.order("businesses_count desc").limit(20)

BUSINESS_count是我数据库中的一列,其中包含该城市的商家数量。

现在,我得到了由business_count订购的20家企业的名单,那些拥有最多企业和其他企业(没有企业)的企业是最大的,一切看起来都很完美。

作为最后一步,我想用“名字asc”对这20个城市的名单进行排序。但是如果我这样做,Rails再次命令我的数据库中的整个城市列表(> 1.000),而不仅仅是20的列表。因此,具有最多业务的城市的先前排序会丢失。如果我在最终排序之前用调试器检查局部变量“popularcities”,我会得到20个条目的正确哈希值。

如何确保Rails最终只是通过“name asc”命令我的列表20,而不是整个数据库与所有城市一起订购?

以下是我的cities_controller中代码的相关部分:

popularcities = City.order("businesses_count desc").limit(20) #gives me a list with the cities I need
@cities = popularcities.order("name asc") #gives me a list of all >1.000 cities sorted by name

1 个答案:

答案 0 :(得分:1)

只需使用Ruby的原生sort

popularcities = City.order("businesses_count desc").limit(20)
@cities = popularcities.sort_by(&:name)