Wenn detect
auf einem int-Array durchgeführt wird, funktioniert es:Rails - Wie kann ich die Verwendung der Datenbank während der Ausführung einer Erkennungsmethode vermeiden?
@number = [1,2,3,4,5,6,7].detect{|n| n == 4}
Variable @number
wird 4.
Aber wenn ich etwas tun, wie folgt aus:
@categories = Category.all
@current_category = @categories.detect{|cat| cat.id == params[:category]}
Das Programm gibt
Category Load (0.2ms) SELECT "categories".* FROM "categories"
Was bedeutet, dass es die Datenbank verwendet, um es zu finden.
Allerdings ist das Element, das ich versuche zu finden, bereits in der Sammlung @categories
, ich möchte es nur finden, um es einer Variablen zuzuordnen.
Natürlich wäre eine andere Lösung, einen linearen Suchalgorithmus zu implementieren, aber ich möchte den Code so sauber wie möglich halten.
Wie kann ich vermeiden, die Datenbank für diese Suche zu verwenden?
EDIT: Ich habe gerade festgestellt, dass dies faul holen könnte. Weil ich vor detect
nie @categories
benutze, so tut es die Abfrage, wenn ich detect
mache. Könnte das wahr sein?
Ja Dank ich dachte nur irgendwie heraus, dass dieser fauler fetching sein könnte, weil ich nicht die Daten vor Verwendung erkennen . Aber wenn ich es benutze, verschwindet diese "Extra-Abfrage", danke :) –