Story
日付までに注文しようとしているというモデルがありcreated_at
ます。Postgresql を使用する Heroku でアプリをホストしているため、コントローラーには次のものが含まれています。
@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 }
編集
created_at
が日時列であり、DATE(...)
関数が時間部分を無視していると思われます。したがって、同じ日に作成された要素をランダムな順序で返します。最初の 2 つのストーリーは同じ日に作成されましたが、数時間離れているため、「反転」しているように見える理由が説明されます。この場合、日付と時刻の両方で並べ替える正しい構文は何でしょうか?