Alternatywą jest wykonanie podkwerendy. Podczas gdy sprzężenie jest bardziej poprawne (i prawdopodobnie również prowadzi do lepszej wydajności), możesz uzyskać dziwne wyniki, jeśli połączysz wiele zakresów, które próbują grupować. Podzapytowanie jest znacznie mniej inwazyjne. Dla tego przykładu będzie to coś w rodzaju:
class Book
scope :with_chapters_count, -> {
select('books.*').
select('(select count(chapters.id) from chapters where chapters.book_id = books.id) as chapters_count')
}
scope :long, -> {
with_chapters_count.where("chapters_count > 10")
}
end
dlaczego nie licznik pamięci podręcznej? –
Czy możesz opisać/wpis z bazą danych, z której korzystasz? Wierzę, że powoduje to pewne zamieszanie w odpowiedziach poniżej: –