Entonces realizo una consulta a la base de datos y tengo una matriz completa de objetos:
@attachments = Job.find(1).attachments
Ahora que tengo una matriz de objetos, no quiero realizar otra consulta de base de datos, pero me gustaría filtrar la matriz en función del Attachmentobjeto file_typepara poder tener una lista de attachmentsdónde está el tipo de archivo 'logo'y luego otra lista de attachmentsdónde el tipo de archivo es'image'
Algo como esto:
@logos = @attachments.where("file_type = ?", 'logo')
@images = @attachments.where("file_type = ?", 'image')
Pero en la memoria en lugar de una consulta de base de datos.
ruby-on-rails
activerecord
joepour
fuente
fuente

partition- ejemplo aquí .Respuestas:
Tratar :
Esto esta bien :
pero para el rendimiento, no es necesario repetir @attachments dos veces:
fuente
Si sus archivos adjuntos son
Esta será una matriz de objetos adjuntos
Utilice el método de selección para filtrar según el tipo de archivo.
Esto no activará ninguna consulta de base de datos.
fuente
has probado la carga ansiosa?
fuente
@attachments = Job.first.attachmentsejecuta una consulta , desea realizar un bucle@attachmentsmientras tanto, no desea más consultas de base de datos. ¿Es esto lo que quieres hacer?Puedes filtrar usando donde
fuente
Haría esto de manera ligeramente diferente. Estructura tu consulta para recuperar solo lo que necesitas y partir de ahí.
Entonces haga su consulta lo siguiente:
Y luego particione los datos:
Eso obtendrá los datos que busca de una manera ordenada y eficiente.
fuente