Schienen :order by Datum in Postgres Rücksendung der falschen Reihenfolge
Ich habe ein Modell namens Story
, dass ich versuche, um durch die created_at
Datum. Da hab ich gehostet, meine app auf Heroku, die verwendet Postgresql, habe ich Folgendes in mein controller:
@stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11)
Ich würde erwarten, dass dieses zu geben, die erste 11 meiner Geschichten, geordnet nach dem Datum der Erstellung, mit der neuesten Geschichte erste.
Leider, das funktioniert nicht. Die meisten der Geschichten, die Rückkehr richtig sortiert, aber die ersten beiden sind gespiegelt. Das heißt, die neueste Geschichte erscheint der zweite in der Liste.
Warum würde das sein? Ich habe einen hinterhältigen Verdacht, dass meine Ergebnisse nicht bestellt oder bestellt auf der falschen Spalte (vielleicht id?) und, dass bis jetzt es passiert nur bestellt werden, wie ich erwartet, wenn angezeigt, auf meiner index-Seite. Wie kann ich es bestellen, wie ich es erwarten?
Falls es jemanden interessiert, der index-view ist die einfache Darstellung der Geschichten, in Ordnung. Das ist (HAML):
- @stories.each do |story|
= render :partial => "event", :locals => { :event => story }
BEARBEITEN
Ich bin misstrauisch, dass die created_at
ist eine datetime-Spalte und die DATE(...)
Funktion von der Zeit Teil. So gibt es die Elemente geschaffen, die am selben Tag in einer zufälligen Reihenfolge. Da die ersten zwei Geschichten wurden erstellt, am selben Tag, aber mehrere Stunden auseinander, das würde erklären, warum Sie zu sein scheinen 'Umgekehrt'. Wenn dies der Fall ist, was wäre dann die richtige syntax order by Datum und Uhrzeit?
- Beachten Sie auch, dass standardmäßig in einer PostgreSQL "null-Werte zu Sortieren, als ob der größer ist als alle nicht-null-Wert; das ist
NULLS FIRST
ist der Standard fürDESC
um, undNULLS LAST
sonst." SQLite sortiert null-Werte als wenn Sie kleiner sind standardmäßig. Das könnte das problem sein, wenn Sie von einem zum anderen und Sie landen hier (wie mich). postgresql.org/docs/8.3/static/queries-order.html#QUERIES-ORDER
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube Sie wollen:
Update für Rails 3+:
Wenn Sie mit Rails 3 ich würde auch empfehlen Ihnen die Verwendung der neuen coolen Abfrage-syntax wäre:
Sehen Active-Record-Abfrage-Schnittstelle für weitere Informationen.
.limit(11)
und Schienen gab mir eine Fehlermeldung über unbekannte syntax.