2013-02-06 79 views
0

我正在尝试按posts的数字对数组@users进行排序。下面是我在我的控制器:Ruby排序问题

@users = User.includes([:posts]).where("user_type = ?", "A")   
@users.sort {|a,b| (a.posts.size <=> b.posts.size)} 

这里就是我有我的观点:

<% @users.each do |user| %> 
    <%= user.name %>: <%= user.posts.size %> 
    <br> 
<% end %> 

我的用户名单是相当随机的,不正确排序。如果我没有弄错,<=>运营商是我想要使用的。我想回到1如果ab更多内容,-1如果ba0如果ab更多帖子有相同数量的职位。

回答

4

这只是失踪的爆炸。

@users.sort! {|a,b| (a.posts.size <=> b.posts.size)} 
+0

+1 ...只是打败了我:P –

2

您正在使用sort代替sort!sort!将排序@users

+0

几秒钟。 :) – iltempo

0

两件事情我看到:

而不是使用sort的,使用sort_by当你挖成一个对象。这不应该是你使用的短链方法大速度,但它可以积少成多:

@users.sort_by! {|a| a.posts.size } 

如果你从数据库中检索数据,而不是在Ruby中排序,使用orderorder_by,这取决于支持哪种方式,让DBM按所需顺序对数据进行排序。 DBM针对排序进行了优化,并且可以非常快速地完成。

+0

我很想使用order或order_by ...但我需要按单独查询的大小进行排序。 –