Optymalizacja

Pordźcie…

category has_many :sub_categories product belongs_to :sub_category product has_many :photos
Jak sprawnie pobrać z bazy najlepiej jednym selectem
wszystkie kategorie, jedną wskazaną podkategorie, wszystkie produkty dla danej podkategori i dla każdego produktu pierwsze zdjęcie.

Gubię sie w :includach :joinach

Pozdrawiam

Wszystkiego na raz się raczej nie wyciągnie, ale wyciągnij wszystkie kategorie oddzielnie i oddzielnie:

  SubCategory.find(id, :include => {:posts => :first_photo})

Zakładając, że dodasz coś takiego do modelu Post:

  has_one :first_photo, :class_name => "Photo", :foreign_key => "photo_id" # powinno też zadziałać bez foreign_key

Dzięki Drogus

SubCategory.find(id, :include => {:products => :photos})

generuje 3 selecty

natomiast z :joins jest jeden select ale nie wyciąga produktów które nie mają powiązanego photo

rozumiem że tak to poprostu działa :slight_smile:

[quote=pski]Dzięki Drogus

SubCategory.find(id, :include => {:products => :photos})

generuje 3 selecty

natomiast z :joins jest jeden select ale nie wyciąga produktów które nie mają powiązanego photo

rozumiem że tak to poprostu działa :)[/quote]
Jeżeli chciałbyś użyć joina to musiałbyś to musiałbyś określić, że ma to być outer join, a nie domyślny inner.

Ale z joinami też trzeba uważać - czasem zapytanie jest tak skomplikowane, że chodzi wolniej niż 3 selecty.