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 Attachment
objeto file_type
para poder tener una lista de attachments
dónde está el tipo de archivo 'logo'
y luego otra lista de attachments
dó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.attachments
ejecuta una consulta , desea realizar un bucle@attachments
mientras 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