2012-10-06 11 views
6

Ich habe ein Modell namens Story, dass ich versuche, durch die created_at Datum zu bestellen. Da ich meine App auf Heroku gehostet haben, die Postgresql verwendet, ich habe folgende in meinem Controller:Schienen: Reihenfolge nach Datum in Postgres falsche Bestellung zurück

@stories = Story.find(:all, :order => "DATE(created_at) DESC" , :limit => 11) 

würde ich erwarten, dass dies die ersten 11 meiner Geschichten zu geben, nach dem Erstellungsdatum geordnet, mit der neueste Geschichte zuerst.

Leider funktioniert das nicht. Die meisten Geschichten kehren korrekt zurück, aber die ersten beiden sind umgedreht. Das heißt, die neueste Geschichte erscheint an zweiter Stelle in der Liste.

Warum sollte das sein? Ich habe den hinterhältigen Verdacht, dass meine Ergebnisse überhaupt nicht geordnet sind oder in der falschen Spalte (vielleicht id?) Bestellt werden, und dass es bis jetzt zufällig so bestellt wurde, wie ich es erwartet hatte, wenn es auf meiner Indexseite angezeigt wurde. Wie kann ich es bestellen, wie ich es erwarte?

Falls jemand interessiert ist, zeigt die Indexansicht einfach die Storys in der richtigen Reihenfolge an. Das heißt (HAML):

- @stories.each do |story| 
    = render :partial => "event", :locals => { :event => story } 

EDIT

Ich bin verdächtig, dass die created_at eine Datumzeit-Spalte und die Funktion DATE(...) ignoriert den Zeitabschnitt. Daher werden die am selben Datum erstellten Elemente in zufälliger Reihenfolge zurückgegeben. Da die ersten beiden Geschichten am selben Tag entstanden sind, aber mehrere Stunden auseinander liegen, würde das erklären, warum sie "umgedreht" zu sein scheinen. Wenn dies der Fall ist, was wäre die richtige Syntax, um nach Datum und Uhrzeit zu sortieren?

Antwort

10

ich Sie glauben wollen:

@stories = Story.find(:all, :order => "created_at DESC" , :limit => 11) 

Update für Rails 3 +:

@stories = Story.order(created_at: :desc).limit(11) 
+0

Das hat den Trick gemacht. Vielen Dank. –

3

Wenn Sie Rails verwenden 3, würde ich empfehlen Ihnen auch die kühle neue Abfragesyntax zu verwenden, die würde be:

@stories = Story.order('created_at DESC').limit(11) 

Weitere Informationen finden Sie unter Active Record Query Interface.

+0

Ich versuchte mit '.limit (11)' und Rails gab mir eine Fehlermeldung über nicht erkannte Syntax. –

Verwandte Themen