Also führe ich eine Abfrage an die Datenbank durch und habe ein vollständiges Array von Objekten:
@attachments = Job.find(1).attachments
Jetzt, wo ich ein Array von Objekten habe, möchte ich keine weitere Datenbankabfrage mehr ausführen, aber ich möchte das Array basierend auf den Attachment
Objekten filtern , file_type
damit ich eine Liste mit attachments
dem Dateityp 'logo'
und dann eine weitere Liste mit dem Objekttyp erhalten kannattachments
wo Der Dateityp ist'image'
Etwas wie das:
@logos = @attachments.where("file_type = ?", 'logo')
@images = @attachments.where("file_type = ?", 'image')
Aber im Speicher statt einer Datenbankabfrage.
ruby-on-rails
activerecord
Joepour
quelle
quelle
partition
- Beispiel hier .Antworten:
Versuchen :
Das ist in Ordnung :
In Bezug auf die Leistung müssen Sie @attachments jedoch nicht zweimal durchlaufen:
quelle
Wenn Ihre Anhänge sind
Dies ist ein Array von Anhangsobjekten
Verwenden Sie die Auswahlmethode, um nach Dateityp zu filtern.
Dies löst keine Datenbankabfrage aus.
quelle
Haben Sie versucht, eifrig zu laden?
quelle
@attachments = Job.first.attachments
ausgeführt ausgeführt wird, möchten Sie eine Schleife ausführen, während Sie@attachments
keine weiteren Datenbankabfragen mehr wünschen. willst du das machenSie können mit where filtern
quelle
Ich würde das etwas anders machen. Strukturieren Sie Ihre Abfrage so, dass nur das abgerufen wird, was Sie benötigen, und teilen Sie sie von dort auf.
Stellen Sie Ihre Anfrage also wie folgt:
Und dann partitionieren Sie die Daten:
Dadurch erhalten Sie die gewünschten Daten auf übersichtliche und effiziente Weise.
quelle