0

@users配列をそれらの数でソートしようとしpostsています。コントローラーにあるものは次のとおりです。

@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-1ba0ab

4

3 に答える 3

4

それはちょうど行方不明の強打です。

@users.sort! {|a,b| (a.posts.size <=> b.posts.size)}
于 2013-02-06T21:49:15.017 に答える
2

sortの代わりに使用していsort!ます。sort!その場で並びます@users

于 2013-02-06T21:49:27.387 に答える
0

私が見る2つのこと:

を使用する代わりに、オブジェクトを掘り下げる必要がある場合sortに使用します。sort_by使用している短いメソッド チェーンでは大幅な高速化にはなりませんが、合計すると次のようになります。

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

データベースからデータを取得する場合は、Ruby でソートする代わりに、サポートされているものに応じてorderまたはを使用して、DBM に必要な順序でデータをソートさせます。order_byDBM はソート用に最適化されており、非常に高速に実行できます。

于 2013-02-06T22:32:29.693 に答える