Chcę pobierać jak najwięcej danych jak najmniejszą ilością pytań SQL’owych. Bez użycia includes() generują mi się trzy pytania. Z includes zostają mi nadal dwa zapytania, a tak na chłopski rozum powinno zostać tylko jedno.
Kod:
def index
@brand = Brand.includes(:bodies).find(params[:brand_id])
@bodies = @brand.bodies
end
I same SQL’e:
Parameters: {"brand_id"=>"2"}
Brand Load (0.4ms) SELECT "brands".* FROM "brands" WHERE "brands"."id" = $1 LIMIT 1 [["id", 2]]
Body Load (0.6ms) SELECT "bodies".* FROM "bodies" WHERE "bodies"."brand_id" IN (2)
Mimo tego, że prosty JOIN:
SELECT bodies.id, bodies.name, brands.name AS brand_name, brands.id AS brand_id FROM bodies JOIN brands ON bodies.brand_id = brands.id WHERE brand_id = 2
Daje dokładnie takie wyniki jakie potrzebuję:
ID NAME BRAND_NAME BRAND_ID
1 TEST 1231 2
2 12345 1231 2
3 KUPA 1231 2
Co muszę zrobić żeby RoR robiło tylko jedno pytanie do bazy danych?
UPDATE: Zmieniłem tytuł, wytłumaczenie w 5 poście.