我想订购模型 Item
中的所有项目,以便它首先显示最近的项目。根据Rails guide ,下面的代码应该可以工作:
Item.order("created_at DESC")
但是,当我在终端中输入那个(或品种)时,最新的项目总是最后显示,这就是它们在我的页面上的显示方式。我如何以最近的优先方式有效地检索它们? (我将在每个页面上一次只显示其中的一部分。)
请注意,我的项目默认范围是最早的。
更新: 这是我得到的 SQL:
SELECT "comments".* FROM "comments" ORDER BY comments.created_at ASC, created_at DESC
所以我想我不应该使用默认范围...
最佳答案
您发布的查询是正确的
Item.order("created_at DESC")
它不起作用的唯一原因是是否有其他任何冲突。通常,冲突由 default_scope
表示。
如果您有一个覆盖您的订单的默认范围,您应该首先unscope
查询
Item.unscoped { Item.order("created_at DESC") }
如果您使用默认范围,我强烈建议您避免使用它们。它们很难调试和取消范围。
在极少数情况下,默认范围是有意义的。您可以在 Controller 中选择时间简单地传递(默认)范围或为其创建自定义方法。
关于ruby-on-rails - 我如何在最近的 Rails 中订购数据库记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20765128/