我有一个模型叫 Story
我想通过 created_at
订购日期。由于我在使用 Postgresql 的 Heroku 上托管了我的应用程序,因此我的 Controller 中有以下内容:
@stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11)
我希望这能给出我的前 11 个故事,按创作日期排序,最新的故事在前。
不幸的是,这行不通。大多数故事返回顺序正确,但前两个被翻转。也就是说,最新的故事出现在列表中的第二位。
为什么会这样?我有一个偷偷摸摸的怀疑,我的结果根本没有被排序,或者被排序在错误的列(也许是 id?)上,直到现在它恰好按照我预期的那样排序,当显示在我的索引页面上时。我怎样才能按照我的预期订购?
如果有人关心,索引 View 只是按顺序显示故事。即(HAML):
- @stories.each do |story|
= render :partial => "event", :locals => { :event => story }
编辑
我怀疑
created_at
是日期时间列和 DATE(...)
函数忽略时间部分。因此它以随机顺序返回在同一日期创建的元素。由于前两个故事是在同一天创建的,但相隔几个小时,这就解释了为什么它们似乎是“颠倒的”。如果是这种情况,按日期和时间排序的正确语法是什么?
最佳答案
我相信你想要:
@stories = Story.find(:all, :order => "created_at DESC" , :limit => 11)
Rails 3+ 的更新:
@stories = Story.order(created_at: :desc).limit(11)
关于ruby-on-rails - rails :order by date in Postgres returning incorrect order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12764765/