J'effectue donc une requête à la base de données et j'ai un tableau complet d'objets:
@attachments = Job.find(1).attachments
Maintenant que j'ai un tableau d'objets, je ne veux pas effectuer une autre requête de base de données, mais je voudrais filtrer le tableau en fonction de l' Attachment
objet file_type
afin que je puisse avoir une liste de l' attachments
emplacement du type de fichier 'logo'
, puis une autre liste de l' attachments
emplacement le type de fichier est'image'
Quelque chose comme ça:
@logos = @attachments.where("file_type = ?", 'logo')
@images = @attachments.where("file_type = ?", 'image')
Mais en mémoire au lieu d'une requête db.
ruby-on-rails
activerecord
Joepour
la source
la source
partition
- par exemple ici .Réponses:
Essayez:
C'est bon :
mais pour les performances, vous n'avez pas besoin d'itérer deux fois @attachments:
la source
Si vos pièces jointes sont
Ce sera un tableau d'objets de pièce jointe
Utilisez la méthode de sélection pour filtrer en fonction de file_type.
Cela ne déclenchera aucune requête de base de données.
la source
avez-vous essayé le chargement impatient?
la source
@attachments = Job.first.attachments
exécutée, vous voulez faire une boucle@attachments
pendant que vous ne voulez plus de requêtes de base de données. c'est ça que tu veux faire?Vous pouvez filtrer en utilisant où
la source
Je procéderais légèrement différemment. Structurez votre requête de manière à ne récupérer que ce dont vous avez besoin et à partir de là.
Alors faites votre requête comme suit:
Et puis partitionnez les données:
Cela obtiendra les données que vous recherchez d'une manière ordonnée et efficace.
la source