2010-12-26 3 views
1

Wie sortiere ich ein Array von Active Record-Objekten am besten nach einem Feld?Ruby on Rails: Wie werden Daten in einem Array von aktiven Datensatzobjekten vor dem Iterieren sortiert?

Dieses Array ein Feld eines Objekts ist, link_pages, und ich es durch das Feld „sequence

<% @menu_bar.link_pages.each do |lp| %> 
       <li id="page_<%= lp.id%>" class="ui-state-default"> 
        <span class="ui-icon ui-icon-arrowthick-2-n-s"></span> 

        <font size=5><%= lp.name %></font> | 
        <%= link_to "remove", 
         :controller => "admin/menu_bars", 
         :action => :remove_page_from_menu, 
         :page => lp.id, 
         :id => @menu_bar.id %> 
       </li> 
      <% end %> 

Vielleicht gibt sortiert wollen, ist ein Weg @menu_bar.link_pages.sort_by_sequence.each do, zu tun, die glatt sein würde, aber ich nur Ich weiß es nicht.

+0

Schienen Version 2 oder 3? – DGM

+0

Version 2.3.8 denke ich. Def nicht 3 – NullVoxPopuli

Antwort

5
@menu_bar.link_pages.sort_by { |e| e.sequence }.each do |lp| 
    . . . 
+0

'@menu_bar.link_pages.sort_by &: sequence.each do | lp |' ist die Kurzschrift _to_proc_ Weg. Siehe auch [diese SO Diskussion] (http://stackoverflow.com/questions/1278510/sort-array-returned-by-activerecord-by-date-or-anyany-other-column) – Epigene

2

Ist link_pageswirklich ein Array von Active Objekte?

Was passiert, wenn Sie dies in der Ansicht hinzufügen?

<%= debug @menu_bar.link_pages.class %> 

Zwei Dinge können passieren. Es kann "Array" oder "ActivetrecordThing" (etwas ähnliches, definitiv nicht Array) drucken.

Wenn Sie wirklich ein Array haben, verwenden Sie die DigitalRoss-Lösung. Wenn Sie eine "ActiverecordSomething" haben, dann erstellen named_scope, so können Sie ganz einfach wiederverwenden:

# Assuming that your model name is "Page" 
class Page < ActiveRecord::Base 
    ... 
    named_scope :sorted_by_sequence, :order => 'pages.sequence ASC' 
    ... 
end 

Dann können Sie tun:

<% @menu_bar.link_pages.sorted_by_sequence each do |lp| %> 
+0

das ist glatt ... I Ich wünschte, ich könnte mehrere richtige Antworten auswählen .... = ( – NullVoxPopuli

+0

Sie können beide Antworten aufwerten ^^ – kikito