在Rails 教程中,它说我可以简单地使用.order("something")
它并且它会工作。然而,当我写Course.order("name DESC")
我得到查询:
SELECT "courses".* FROM "courses" ORDER BY name ASC, name DESC
当我真的想要时(注意它只是由 订购的name DESC
):
SELECT "courses".* FROM "courses" ORDER BY name DESC
我怎么能强行通过?
在Rails 教程中,它说我可以简单地使用.order("something")
它并且它会工作。然而,当我写Course.order("name DESC")
我得到查询:
SELECT "courses".* FROM "courses" ORDER BY name ASC, name DESC
当我真的想要时(注意它只是由 订购的name DESC
):
SELECT "courses".* FROM "courses" ORDER BY name DESC
我怎么能强行通过?
如果您有一个由 a 限制的默认订单default_scope
,您可以使用reorder
Order.reorder('name DESC')
更新: Usingunscoped
也可以,但要小心,这会完全删除查询中定义的所有范围。比如下面的都会返回相同的sql
Order.where('id IS NOT NULL').unscoped.order('name DESC')
Order.unscoped.order('name DESC')
Order.scope1.scope2.unscoped.order('name DESC')
current_user.orders.unscoped.order('name DESC')
这是因为我default_scope
在导致它的模型中使用。运行它可以避免范围:
Course.unscoped.order("name DESC")
编辑:为了将来参考,这是代码气味,default_scope
应该小心使用,因为开发人员经常会忘记(编写代码几个月后)default_scope
设置并咬你。