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

で定義されたデフォルトの順序がある場合は、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')
于 2013-03-01T04:31:38.590 に答える
2

default_scope原因となった機種で使用していたためでした。これを実行すると、スコープが回避されます。

Course.unscoped.order("name DESC")

編集:将来の参考のために、これはコードの匂いであり、default_scope慎重に使用する必要がdefault_scopeあります。

于 2013-03-01T04:31:28.980 に答える