クエリを実行するたびに order_by("created_at desc") と言う必要がないように、データベース内のユーザーを並べ替えることができますか?
私には論理的なことのように思えますが、それが可能かどうか、そしてそれがベストプラクティスであるかどうかはわかりませんか?
解決
私はすでに default_scope を使用していますが、あなたから理解しているように、それが最善の方法ですか? しかし、答えてくれてありがとう。
クエリを実行するたびに order_by("created_at desc") と言う必要がないように、データベース内のユーザーを並べ替えることができますか?
私には論理的なことのように思えますが、それが可能かどうか、そしてそれがベストプラクティスであるかどうかはわかりませんか?
解決
私はすでに default_scope を使用していますが、あなたから理解しているように、それが最善の方法ですか? しかし、答えてくれてありがとう。
結果をcreatedatedescでソートした後の場合、自然の逆順はこれに近くなります(ただし、同一であるとは限りません)。
特定の順序が必要な場合order_by()
は、インデックス付きクエリに追加することがこれを保証する最良の方法です。
デフォルトで生成されたObjectIdを使用している場合、最初の4バイトは実際にはUNIXタイムスタンプ(エポックからの秒数)です..ドキュメントに記載されているいくつかの例外を除いて、_id
フィールドはデフォルトでインデックス付けされます。
したがって、mongoシェルで(ObjectIdに基づいて)作成された最後の50ユーザーのようなクエリは次のようになります。
db.users.find().sort({_id:-1}).limit(50)
デフォルトのスコープについてはさまざまな見方がありますが、求めていることを達成するには:
http://apidock.com/rails/ActiveRecord/Base/default_scope/class
class User < ActiveRecord::Base
default_scope order('created_at DESC')
### other model code here ###
end
1つまたは複数のインデックスをdbテーブルに追加できるはずです。大きなテーブルにインデックスを作成するためのオーバーヘッドが無効になる可能性があるため、これを稼働中のシステムで実行する場合は注意が必要です。
編集:拡張する必要があります。
インデックスを作成することにより、注文する必要がありますが、注文/並べ替えはより効率的になります。