2012-10-06 10 views
6

Mam model o nazwie Story, który próbuję zamówić przed datą created_at. Odkąd gospodarzem moją aplikację na Heroku, który używa PostgreSQL, mam następujący w moim kontrolera:Szyny: zamówienie według daty w Postgresie zwracanie nieprawidłowego zamówienia

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

Spodziewam się to z uzyskaniem pierwszych 11 z moich opowiadań, uporządkowany według daty utworzenia, z najnowsza historia pierwsza.

Niestety, to nie działa. Większość historii wraca poprawnie, ale pierwsze dwa są odwrócone. To znaczy, najnowsza historia pojawia się na drugiej pozycji na liście.

Dlaczego miałoby to być? Mam podstępne podejrzenie, że moje wyniki nie są w ogóle zamawiane lub są zamawiane w niewłaściwej kolumnie (może id?) I że do tej pory po prostu zostało zamówione tak, jak się spodziewałem, gdy jest wyświetlane na mojej stronie indeksu. Jak mogę go zamówić, tak jak tego oczekuję?

W przypadku, gdy ktoś ma na to ochotę, widok indeksu po prostu wyświetla historie w kolejności. To jest (haml):

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

EDIT

jestem podejrzliwy, że created_at jest kolumną datetime i funkcja DATE(...) pomija część czasu. Więc zwraca elementy utworzone w tym samym dniu w kolejności losowej. Ponieważ pierwsze dwa opowiadania powstały tego samego dnia, ale w odstępie kilku godzin, co wyjaśniałoby, dlaczego wydają się one "odwrócone". W takim przypadku, jaka byłaby poprawna składnia zamówienia zarówno według daty, jak i godziny?

Odpowiedz

10

wierzę chcesz:

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

Aktualizacja dla Rails 3+:

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

To załatwiło sprawę. Dzięki. –

3

Jeśli używasz szyny 3, chciałbym Zachęcamy do korzystania z chłodnym nowej składni, które zapytania być:

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

Aby uzyskać więcej informacji, zobacz Active Record Query Interface.

+0

Próbowałem użyć '.limit (11)' i Rails dał mi komunikat o błędzie o nierozpoznanej składni. –

Powiązane problemy