在Rails tutorial中,它说我可以简单地使用.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
我怎么能强迫它通过?
答案 0 :(得分:4)
如果您有default_scope
定义的默认订单,则可以使用reorder
Order.reorder('name DESC')
更新:使用unscoped
也可以工作,但要小心这完全删除了查询中定义的所有范围。例如,以下将全部返回相同的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')
答案 1 :(得分:2)
这是因为我在导致它的模型中使用了default_scope
。运行此操作可以避免范围界定:
Course.unscoped.order("name DESC")
编辑:为了将来参考,这是代码气味,应谨慎使用default_scope
,因为开发人员通常会忘记(编写代码后数月)default_scope
已设置并咬回来。