2012-10-06 7 views
6

created_atで注文しようとしているStoryというモデルがあります。私は、PostgreSQLを使用していますHerokuの、上の私のアプリを主催してきたので、私は私のコントローラで、次のしている:Rails:不適切な注文を返すPostgresの日付順

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

私はこれはと、作成日順私の話の最初の11を与えることを期待します最新の物語が最初です。

残念ながら、これは機能しません。ストーリーの大部分は正しく並べ替えられますが、最初の2つは反転されます。つまり、最新のストーリーがリストの2番目に表示されます。

これはなぜでしょうか?私の結果は全く注文されていないか、間違った列(おそらくid?)で注文されていること、そしてこれまでインデックスページに表示されたときのように注文されたという疑惑が疑わしい。私はそれを期待どおりに注文することができますか?

誰かが気になる場合は、インデックスビューは単にストーリーを順番に表示するだけです。それは、(HAML)です:

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

EDIT

私はcreated_atはdatetime型の列であるとDATE(...)機能は、時間部分を無視することを不審です。したがって、同じ日付に作成された要素をランダムな順序で返します。最初の2つのストーリーは同じ日に作成されていたが、数時間離れていたので、なぜそれらが逆転しているように見えるのかが分かるだろう。この場合、日付と時刻の両方で注文する正しい構文は何でしょうか?

答えて

10

私はあなたがしたいと考えている:Railsのための

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

は更新3+:

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

それはトリックでした。ありがとう。 –

3

あなたがRailsの3を使用している場合、私はまた、どのだろうクールな新しいクエリ構文を使用することをお勧めしますbe:

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

詳細については、Active Record Query Interfaceを参照してください。

+0

私は '.limit(11)'を使ってみましたが、Railsは認識できない構文に関するエラーメッセージを表示しました。 –

関連する問題