如何最近在rails中订购数据库记录?

时间:2013-12-24 18:11:51

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

我想订购模型Item中的所有项目,以便首先显示最新的项目。根据{{​​3}},以下代码应该有效:

 Item.order("created_at DESC")

然而,当我在终端中输入那些(或多种)时,最新的项目总是最后显示,这就是它们在我的页面上显示的方式。我最近如何有效地检索它们? (我将在每页上一次只显示其中一些。)

请注意,我的项目默认范围是最早的。

更新 这是我得到的SQL:

  

SELECT“comments”。* FROM“comments”ORDER BY comments.created_at ASC,created_at DESC

所以我想我不应该使用默认范围......

6 个答案:

答案 0 :(得分:5)

我用reverse修改了CDub的答案,所以它现在有效:

 Item.order(:created_at).reverse

我仍然不确定为什么Rails指南不起作用。上述方法也不适用于分页。

答案 1 :(得分:5)

您发布的查询是正确的

Item.order("created_at DESC")

它不起作用的唯一原因是,如果还有其他任何与之相冲突的原因。通常,冲突由default_scope表示。

如果您的默认范围覆盖了您的订单,则应首先unscope查询

Item.unscoped { Item.order("created_at DESC") } 

如果您使用默认范围,我强烈建议您避免使用默认范围。它们很难调试和解决。

极少数情况下默认范围是有意义的。您只需在控制器中的选定时间传递(默认)范围,或为其创建自定义方法。

答案 2 :(得分:4)

我意识到这是一个非常古老的问题,但没有一个答案包含没有编写原始SQL的解决方案,这可以从Rails 3 +开始使用:

http://localhost/admin/reactBoilerplateDeps.dll.js

或使用[STAGING Environment] Delete the organization through the CRM Deployment Manager Delete the <ORGNAME>_MSCRM database [PRODUCTION Environment] Backup <ORGNAME>_MSCRM database (can be done live) Copy the backup to STAGING sql [STAGING Environment again] Restore the copied backup Import organization in deployment manager (users will be mapped automatically) 方法:

Item.order(created_at: :desc)

http://guides.rubyonrails.org/active_record_querying.html#ordering查看更多信息 和 http://guides.rubyonrails.org/active_record_querying.html#reverse-order

答案 3 :(得分:1)

Item.unscoped.order('created_at DESC') should work。使用反向可能会在记录数增加时降低性能

答案 4 :(得分:0)

纠正并测试

@purchase_orders = current_company.purchase_orders.order(:date)
@purchase_orders = @purchase_orders.reverse_order 

答案 5 :(得分:-1)

您可以添加您还可以在项目模型中定义默认顺序

default_scope order('created_at DESC')