Então, eu executo uma consulta ao banco de dados e tenho uma matriz completa de objetos:
@attachments = Job.find(1).attachments
Agora que tenho uma matriz de objetos, não quero realizar outra consulta de banco de dados, mas gostaria de filtrar a matriz com base nos Attachment
objetos file_type
para que eu possa ter uma lista de attachments
onde está o tipo de arquivo 'logo'
e, em seguida, outra lista de attachments
onde o tipo de arquivo é'image'
Algo assim:
@logos = @attachments.where("file_type = ?", 'logo')
@images = @attachments.where("file_type = ?", 'image')
Mas na memória, em vez de uma consulta db.
ruby-on-rails
activerecord
joepour
fonte
fonte
partition
- por exemplo, aqui .Respostas:
Experimentar :
Isto é bom :
mas em termos de desempenho, você não precisa iterar @attachments duas vezes:
fonte
Se seus anexos são
Esta será uma matriz de objetos de anexo
Use o método select para filtrar com base em file_type.
Isso não acionará nenhuma consulta de banco de dados.
fonte
você já tentou carregar antecipadamente?
fonte
@attachments = Job.first.attachments
executada, você deseja fazer um loop,@attachments
enquanto isso, você não quer mais consultas de banco de dados. é isso que você quer fazer?Você pode filtrar usando onde
fonte
Eu faria isso de maneira um pouco diferente. Estruture sua consulta para recuperar apenas o que você precisa e divida a partir daí.
Portanto, faça sua consulta da seguinte maneira:
E então particionar os dados:
Isso obterá os dados que você procura de maneira organizada e eficiente.
fonte