ruby-on-rails - rails :order by date in Postgres returning incorrect order

标签 ruby-on-rails rails-postgresql

我有一个模型叫 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/

相关文章:

ruby-on-rails - 使用 ruby​​ist-aasm(充当状态机)在转换时保留状态列

ruby-on-rails - Rails 4搜索选项。有哪些选项可以将完整的HTML网站搜索与ActiveRecord搜索结合在一起?

ruby-on-rails - Rspec:如何测试引发错误的方法

postgresql - 使用 PSequel GUI 在 Mac 上连接到本地主机 PostgreSQL?

ruby-on-rails - Rails、Devise、Heroku 从控制台删除用户帐户

ruby-on-rails - 使用 Rails 进行模块化开发

ruby-on-rails - 为什么我在 Rails 4/Postgres 中创建的所有表都使用 "dimension"of 1?

python - Django:优化多对多查询

ruby-on-rails - 当我为列设置默认函数时,为什么 Postgres 会双引号第一个函数标识符?