ruby-on-rails - 我如何在最近的 Rails 中订购数据库记录?

标签 ruby-on-rails ruby-on-rails-3 postgresql activerecord

我想订购模型 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/

相关文章:

ruby-on-rails - Ruby 解析数组(特殊情况)

postgresql - mac 上 postgres 10.2 的日志在哪里

Postgresql 将表列类型更改为唯一非空

mysql - 将 postgresql 查询转换为适用于 mysql 的查询

ruby-on-rails - DRYer 在 factory_girl 中与协会进行测试

ruby-on-rails - Rails 6 - Action 文本和 API

ruby-on-rails-3 - 尝试调试 ruby​​ 1.9.3p194 rails 3.2.7

ruby-on-rails - :disabled field not working in fields_for

ruby-on-rails - 初始推送大型 repo 的替代方法

ruby-on-rails - 在 Rails 中,通过 created_at 排序是否需要索引?