我想订购模型Item
中的所有项目,以便首先显示最新的项目。根据{{3}},以下代码应该有效:
Item.order("created_at DESC")
然而,当我在终端中输入那些(或多种)时,最新的项目总是最后显示,这就是它们在我的页面上显示的方式。我最近如何有效地检索它们? (我将在每页上一次只显示其中一些。)
请注意,我的项目默认范围是最早的。
更新 这是我得到的SQL:
SELECT“comments”。* FROM“comments”ORDER BY comments.created_at ASC,created_at DESC
所以我想我不应该使用默认范围......
答案 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')