Rails Einen Datensatz im ActiveRecord :: Relation-Objekt suchen, ohne die Datenbank erneut abzufragen

7

Ich möchte einen bestimmten Datensatz innerhalb eines ActiveRecord::Relation -Objekts finden, damit ich das Attribut dieses Datensatzes abrufen kann.

Das Folgende funktioniert, aber das Problem ist, dass es die Datenbank erneut mit der find_by -Anweisung trifft. Es sollte nicht müssen. Es sollte eine Möglichkeit für Schienen geben, das Objekt innerhalb des Objekts ActiveRecord::Relation zu finden, anstatt die Datenbank erneut abfragen zu müssen.

%Vor%     
Neil 08.07.2015, 14:48
quelle

3 Antworten

12

Sobald die Realtion geladen wurde, können Sie normale Array-Methoden verwenden. find ist hier eine sehr interessante Methode - wenn block angegeben ist, wird sie an das Relation-Ziel delegiert:

%Vor%     
BroiSatse 08.07.2015, 14:52
quelle
9

Wenn Sie find_by aufrufen, wird es die Datenbank treffen.

Das relation-Objekt wird verwendet, um die db-Ergebnisse zu laden.

Sobald sie für den Aufruf all geladen wurden, können Sie im resultierenden Array suchen.

Wenn Sie in Ihrem Rubin-Prozess nach den Ergebnissen suchen möchten, die sich bereits im Speicher befinden, sollten Sie innerhalb des Arrays mit find oder detect suchen (die dasselbe tun). Ich neige dazu, detect zu verwenden, daher ist klar, dass es nicht auf die Datenbank trifft:

%Vor%

Ссылка

    
Andrew Kuklewicz 08.07.2015 15:02
quelle
0

Sie können immer where -Klausel verwenden. Zum Beispiel

%Vor%

Um die @blog-Instanz mit der ID 1 zu erhalten (und von der Datenbank neu zu laden). Denken Sie daran, dass diese Abfrage schnell, effizient und sicher ist (falls Sie params[:id] anstelle der fest codierten ID hinzufügen möchten).

    
Developer 18.02.2018 23:32
quelle