在Rails中按顺序添加它自己的顺序

时间:2013-03-01 04:25:25

标签: ruby-on-rails ruby postgresql

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

我怎么能强迫它通过?

2 个答案:

答案 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已设置并咬回来。