Ruby on rails Rails:Postgres中的按日期排序返回错误的顺序

Ruby on rails Rails:Postgres中的按日期排序返回错误的顺序,ruby-on-rails,rails-postgresql,Ruby On Rails,Rails Postgresql,我有一个名为故事的模型,我正试图按日期创建的订购。由于我在Heroku(使用Postgresql)上托管了我的应用程序,我的控制器中有以下内容: @stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11) 我希望这会给出我的前11个故事,按创作日期排序,首先是最新的故事 不幸的是,这不起作用。大多数故事的顺序都正确,但前两个故事被翻转了。也就是说,最新的故事出现在列表的第二位 为什么会

我有一个名为故事的模型,我正试图按日期创建的订购。由于我在Heroku(使用Postgresql)上托管了我的应用程序,我的控制器中有以下内容:

@stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11)
我希望这会给出我的前11个故事,按创作日期排序,首先是最新的故事

不幸的是,这不起作用。大多数故事的顺序都正确,但前两个故事被翻转了。也就是说,最新的故事出现在列表的第二位

为什么会这样?我暗自怀疑,我的结果根本没有排序,或者是在错误的列上排序(可能是id?),直到现在,它只是碰巧按照我在索引页上显示时的预期排序。我怎样才能按我所期望的那样订购呢

如果有人关心,索引视图只是按顺序显示故事。即(HAML):

编辑

我怀疑在处创建的
是一个日期时间列,
日期(…)
函数忽略了时间部分。因此,它以随机顺序返回在同一日期创建的元素。因为前两个故事是在同一天创作的,但相隔几个小时,这就解释了为什么它们看起来是“颠倒的”。如果是这种情况,按日期和时间排序的正确语法是什么?

我相信您希望:

@stories = Story.find(:all, :order => "created_at DESC" , :limit => 11)
Rails 3+的更新:

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

如果您使用的是Rails 3,我还建议您使用酷炫的新查询语法:

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

有关更多信息,请参阅。

我尝试使用
.limit(11)
时,Rails向我提供了一条关于无法识别语法的错误消息。另外请注意,在PostgreSQL中,默认情况下“空值排序时,似乎比任何非空值都大;也就是说,
NULLS FIRST
DESC
顺序的默认值,
NULLS LAST
否则。”SQLite对空值进行排序,就好像默认情况下空值较小一样。这可能是你的问题,如果你从一个移动到另一个,你在这里结束(像我一样)。
@stories = Story.order('created_at DESC').limit(11)