我有一个城市数据库,其中包含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
答案 0 :(得分:1)
只需使用Ruby的原生sort
。
popularcities = City.order("businesses_count desc").limit(20)
@cities = popularcities.sort_by(&:name)