我有一个模型Story
,我想按created_at
日期订购。由于我在使用 Postgresql 的 Heroku 上托管了我的应用程序,因此我的控制器中有以下内容:
@stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11)
我希望这会给出我的前 11 个故事,按创建日期排序,最新的故事在前。
不幸的是,这不起作用。大多数故事都按正确顺序返回,但前两个故事颠倒了。也就是说,最新的故事出现在列表的第二位。
为什么会这样?我有一个偷偷摸摸的怀疑,我的结果根本没有排序,或者被排序在错误的列上(也许是 id?),并且直到现在它恰好按照我在索引页面上显示时的预期排序。我怎样才能按我的预期订购它?
万一有人关心,索引视图只是按顺序显示故事。即(HAML):
- @stories.each do |story|
= render :partial => "event", :locals => { :event => story }
编辑
我怀疑这created_at
是一个日期时间列,并且该DATE(...)
函数忽略了时间部分。因此它以随机顺序返回在同一日期创建的元素。由于前两个故事是在同一天创建的,但相隔几个小时,这可以解释为什么它们似乎是“颠倒的”。如果是这种情况,按日期和时间排序的正确语法是什么?