Rod*_*eas 11 ruby-on-rails rails-postgresql
我有一个模型叫做Story我试图按created_at日期排序.由于我在使用Postgresql的Heroku上托管了我的应用程序,因此我的控制器中有以下内容:
@stories = Story.find( :all, :order => "DATE(created_at) DESC" , :limit => 11)
Run Code Online (Sandbox Code Playgroud)
我希望这能够按照创作日期排列我的前11首故事,并以最新的故事开头.
不幸的是,这不起作用.大多数故事都会正确地返回,但前两个是翻转的.也就是说,最新的故事在列表中排在第二位.
为什么会这样?我有一种偷偷摸摸的怀疑,我的结果根本没有排序或者是在错误的列上排序(也许是id?)而且直到现在它恰好按照我的预期在我的索引页面上显示时进行了排序.如何按照我的预期订购?
如果有人关心,索引视图只是按顺序显示故事.那是(HAML):
- @stories.each do |story|
= render :partial => "event", :locals => { :event => story }
Run Code Online (Sandbox Code Playgroud)
编辑
我怀疑created_at是一个datetime列,该DATE(...)函数忽略了时间部分.因此它以随机顺序返回在同一日期创建的元素.由于前两个故事是在同一天创建的,但相隔几个小时,这可以解释为什么它们似乎是"逆转"的.如果是这种情况,那么按日期和时间排序的正确语法是什么?
gyl*_*laz 16
我相信你想:
@stories = Story.find(:all, :order => "created_at DESC" , :limit => 11)
Run Code Online (Sandbox Code Playgroud)
Rails 3+的更新:
@stories = Story.order(created_at: :desc).limit(11)
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Rails 3,我还鼓励您使用很酷的新查询语法,即:
@stories = Story.order('created_at DESC').limit(11)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅Active Record 查询接口。
| 归档时间: |
|
| 查看次数: |
16573 次 |
| 最近记录: |