0

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

我怎么能强行通过?

4

2 回答 2

4

如果您有一个由 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')
于 2013-03-01T04:31:38.590 回答
2

这是因为我default_scope在导致它的模型中使用。运行它可以避免范围:

Course.unscoped.order("name DESC")

编辑:为了将来参考,这是代码气味,default_scope应该小心使用,因为开发人员经常会忘记(编写代码几个月后)default_scope设置并咬你。

于 2013-03-01T04:31:28.980 回答