Więc wykonuję zapytanie do bazy danych i mam pełną tablicę obiektów:
@attachments = Job.find(1).attachments
Teraz, gdy mam tablicę obiektów, nie chcę wykonywać kolejnego zapytania db, ale chciałbym przefiltrować tablicę na podstawie Attachment
obiektu, file_type
aby mieć listę miejsc, w attachments
których znajduje się typ pliku, 'logo'
a następnie kolejną listę attachments
miejsc typ pliku to'image'
Coś takiego:
@logos = @attachments.where("file_type = ?", 'logo')
@images = @attachments.where("file_type = ?", 'image')
Ale w pamięci zamiast zapytania db.
ruby-on-rails
activerecord
joepour
źródło
źródło
partition
- na przykład tutaj .Odpowiedzi:
Próbować :
Jest okej :
ale ze względu na wydajność nie musisz dwukrotnie iterować @ załączników:
źródło
Jeśli twoje przywiązania są
Będzie to tablica obiektów załączników
Użyj metody select, aby filtrować na podstawie file_type.
Nie spowoduje to żadnego zapytania o bazę danych.
źródło
czy próbowałeś chętnego ładowania?
źródło
@attachments = Job.first.attachments
, chcesz zapętlić, a@attachments
tymczasem nie chcesz więcej zapytań db. czy to jest to, co chcesz zrobić?Możesz filtrować za pomocą gdzie
źródło
Podszedłbym do tego nieco inaczej. Skonfiguruj zapytanie tak, aby pobierało tylko to, czego potrzebujesz, i dziel je stamtąd.
Więc stwórz następujące zapytanie:
A następnie podziel dane:
Pozwoli to uzyskać potrzebne dane w schludny i wydajny sposób.
źródło