2012-10-06 20 views
6

Story adlı bir modele sahibim, created_at tarihine göre sipariş vermeye çalışıyorum. Ben PostgreSQL'i kullanan Heroku, benim app barındırılan ettik beri, benim denetleyicisi vardır:Raylar: Postgres'e göre siparişi yanlış siparişi döndürme

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

Bununla, oluşturulma tarihi tarafından sipariş Hikayelerimden ilk 11, vermek beklenir en yeni hikaye.

Maalesef, bu işe yaramıyor. Hikayelerin çoğu, doğru şekilde sipariş veriliyor, ancak ilk ikisi ters çevriliyor. Yani, en son hikaye listede ikinci görünür.

Neden böyle olur? Sonuçların hiç sipariş edilmediğinden veya yanlış sütunda (belki de kimlik) sipariş edildiğinden ve dizin sayfamda görüntülendiğinde beklediğim gibi sipariş verilemediğinden şüpheleniyorum. Beklediğim gibi siparişi nasıl alabilirim?

Herkesin umurunda olması durumunda, dizin görünümü sırayla sadece öyküleri görüntülüyor. Bu, (HAML) aşağıdaki gibidir: created_at bir tarih saat sütun olduğu

I şüpheli

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

DÜZENLEME ve DATE(...) fonksiyon saat kısmı göz ardı eder. Bu nedenle aynı tarihte oluşturulmuş öğeleri rastgele bir sırayla döndürür. İlk iki öykü aynı günde, fakat birkaç saat arayla yaratıldığından beri, neden “tersine döndük” gibi görünüyor. Böyle bir durumda, hem tarih, hem de zaman açısından doğru sözdizimi ne olurdu? Sana inanıyorum

cevap

10

istiyorum: 3+ Raylar için

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

Güncelleme:

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

Bu hile yaptı. Teşekkürler. –

3

Eğer Rails 3 kullanıyorsanız, ben de hangi olur serin yeni sorgu sözdizimi kullanmak teşvik edeceğini Daha fazla bilgi için bkz. Active Record Query Interface.

+0

'.limit (11)' yi kullanmayı denedim ve Rails bana tanınmayan bir sözdizimi hakkında bir hata mesajı verdi. –