am-*_*ils 4 postgresql activerecord ruby-on-rails ruby-on-rails-3
我要订购模型中的所有项目,Item以便它首先显示最新的项目。根据Rails指南,以下代码应该起作用:
Item.order("created_at DESC")
Run Code Online (Sandbox Code Playgroud)
但是,当我在终端中键入该(或多个)品种时,最新的项目始终显示在最后,这就是它们在我的页面上显示的方式。我如何有效地从他最近的第一人那里检索到它们?(我将在每个页面上一次只显示其中一些。)
请注意,我默认的项目范围是最早的。
更新: 这是我得到的SQL:
选择“评论”。*从“评论”中按评论排序。created_atASC,created_at DESC
所以我想我不应该使用默认范围...
我使用修改了CDub的答案,reverse因此现在可以使用:
Item.order(:created_at).reverse
Run Code Online (Sandbox Code Playgroud)
我仍然不确定为什么Rails指南的方法行不通。同样,上述方法在分页时效果也不佳。
您发布的查询是正确的
Item.order("created_at DESC")
Run Code Online (Sandbox Code Playgroud)
它不起作用的唯一原因是,如果还有其他冲突。通常,冲突用表示default_scope。
如果您具有覆盖您订单的默认范围,则应首先unscope查询
Item.unscoped { Item.order("created_at DESC") }
Run Code Online (Sandbox Code Playgroud)
如果您使用默认范围,强烈建议您避免使用它们。它们很难调试和扩展范围。
在极少数情况下,默认范围才有意义。您可以在选择时在控制器中简单地传递(默认)作用域或为其创建自定义方法。
我意识到这是一个非常老的问题,但是所有答案都包含未编写原始SQL的解决方案,该语言自Rails 3+起可用:
Item.order(created_at: :desc)
Run Code Online (Sandbox Code Playgroud)
或使用reverse_order方法:
Item.order(:created_at).reverse_order
Run Code Online (Sandbox Code Playgroud)
请访问http://guides.rubyonrails.org/active_record_querying.html#ordering 和 http://guides.rubyonrails.org/active_record_querying.html#reverse-order了解更多信息。
| 归档时间: |
|
| 查看次数: |
5764 次 |
| 最近记录: |