2016-11-21 1 views
1

Ich habe eine Sammlung ActiveRecord User Objekte. User hat ein Attribut, engagement, das ein Float ist. Unter der Annahme, users = User.all.order(engagement: :desc) kehrt 1000 Datensätze und current_user ist ein User Objekt innerhalb users, würde Ich mag die Position kennen oder Index current_user innerhalb users ohne die Datenbank erneut abfragen oder mit Hilfe eines Aufzählungs Verfahren wie each_with_index, die langsam ist. Ist das möglich?ActiveRecord finde die Position (Index) des Datensatzes innerhalb der Relation basierend auf dem Wert des Attributs

Antwort

2

sammeln die ids und den Index des current_user.id

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

Sie die ID Karte zu vermeiden zupfen kann nur finden

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

Das ist großartig! Verringern Sie die Reaktionszeit in meinen Tests um etwa 30%. Vielen Dank – ACIDSTEALTH

Verwandte Themen