2016-05-29 3 views
1

ich gemacht habe eine statstics Seite, auf der ich zeigen ein Diagramm mit den Benutzern und der Anzahl der Vermerke sie haben, die wie folgt aussieht anzuzeigen jetzt zu tun, ist das angezeigte Ergebnis nach der Anzahl der Vermerke zu sortieren und nicht sicher, wie man das richtig macht.Rubin auf Schienen. <a href="https://i.stack.imgur.com/aSvTv.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/aSvTv.png" alt="enter image description here"></a></p> <p>Was ich will: Sortieren einer Hash nach der Anzahl der Vermerke in einem Diagramm

Die @data I ist wie folgt aufgebaut bin Anzeige:

@data = @users.map { |user| 
      amount = user.inbound_endorsements.joins(:endorsed_user).group(:name).count 
       if !amount.empty? 
       {name: user.name, data: amount} 
       end 
      } 

Und meiner Ansicht nach

<%= @data.compact %> 

Gibt einen Hash wie folgt aus:

[{:name=>"Jess Corwin", :data=>{"Jess Corwin"=>1}}, {:name=>"Rhiannon Nicolas", :data=>{"Rhiannon Nicolas"=>1}}, {:name=>"Assunta Pfeffer", :data=>{"Assunta Pfeffer"=>2}}, {:name=>"Rafaela Farrell", :data=>{"Rafaela Farrell"=>1}}, {:name=>"Maurine Hettinger", :data=>{"Maurine Hettinger"=>1}}]

Und ich will um es nach der Nummer zu sortieren.

Ich habe versucht, diffeerent Ansätze wie:

<%= @data.compact.sort! %> 
<%= @data.compact.sort_by{ |name,data| data } %> 
<%= @data.compact.sort_by{ |d| d[:data] } %> 

und andere ähnliche Ansätze führen die meisten von ihnen in einem Fehler:

comparison of Hash with Hash failed

Jede Hilfe, wie kann ich dies zu erreichen ist zu erkennen, !

Antwort

1
arr.sort_by { |h| h[:data].values } 
=> [{:name=>"Jess Corwin", :data=>{"Jess Corwin"=>1}}, 
    {:name=>"Rhiannon Nicolas", :data=>{"Rhiannon Nicolas"=>1}},   
    {:name=>"Rafaela Farrell", :data=>{"Rafaela Farrell"=>1}}, 
    {:name=>"Maurine Hettinger", :data=>{"Maurine Hettinger"=>1}}, 
    {:name=>"Assunta Pfeffer", :data=>{"Assunta Pfeffer"=>2}}] 
+0

Großartig! Jetzt nur, wenn Sie mir sagen könnten, wie man die Reihenfolge umkehrt, es absteigend macht :) – Helban

+1

@Helban, 'arr.sort_by {| h | h [: data] .values} .reverse' – Ilya

+0

Ehrfürchtig! Vielen Dank! Genau das habe ich gesucht. Schnelle und gute Antwort, danke! – Helban