2016-11-21 9 views
1

私はコレクションActiveRecord Userオブジェクトを持っています。 Userの属性はengagementです。これはfloatです。 users = User.all.order(engagement: :desc)が1000レコードを返し、current_userUserオブジェクトの場合は、current_userの範囲はで、データベースに再度クエリするか、遅い数値のeach_with_indexなどを使用しないとわかります。これは可能ですか?ActiveRecord属性内のレコードの位置(インデックス)を検索します。

答えて

2

idsを収集し、あなただけのこれは素晴らしいですマップ

index = User.order(engagement: :desc).pluck(:id).index(current_user.id) 
+0

を避けるためにIDを摘み取ることができcurrent_user.id

index = User.all.order(engagement: :desc).map(&:id).index(current_user.id) 

のインデックスを見つけます!私のテストでは、応答時間を約30%短縮しました。ありがとう – ACIDSTEALTH

関連する問題