Mis vahe on Joins ja Includes Ruby on Rails?
sobes.tech AI
Vastus AI-lt
joins kasutatakse SQL JOIN operaatorite täitmiseks, et valida andmeid tabelite vaheliste sidemete alusel, kuid samal ajal laaditakse ainult põhimudeli veerud.
includes kasutatakse N+1 päringute probleemi lahendamiseks. See teeb kas ühe SQL-päringu koos LEFT OUTER JOIN-iga (kui ei ole kaasatud tingimusi seotud assotsiatsioonidele), või kaks SQL-päringut (üks põhimudelile, teine seotud mudelitele), et laadida kõik seotud mudelite andmed koos põhiga, vältides mitmeid täiendavaid päringuid.
Peamised erinevused:
- Eesmärk:
joins- filtreerimine/valimine seotud andmete põhjal;includes- seotud andmete laadimise optimeerimine (N+1). - SQL-päring:
joins- tavaliselt INNER JOIN (aga võib olla ka muu);includes- LEFT OUTER JOIN või kaks eraldi päringut. - Andmete laadimine:
joins- laadib ainult põhimudeli, seotud andmed ei ole saadaval ilma täiendavate päringuteta;includes- laadib põhimudeli ja seotud mudelid. - Juurdepääs seotud andmetele: Pärast
joins-i juurdepääs seotud andmetele põhjustab täiendavaid päringuid. Pärastincludes-i juurdepääs seotud andmetele ei põhjusta täiendavaid päringuid.
# Näide kasutades joins
# Leia kasutajad, kellel on vähemalt üks post
User.joins(:posts)
# Näide kasutades includes
# Laadi kõik kasutajad ja nende postitused ühe või kahe päringuga
User.includes(:posts).each do |user|
user.posts.each do |post|
# Juurdepääs postile ilma täiendava päringuta
puts post.title
end
end
Valik joins ja includes vahel sõltub ülesandest: kui vaja on lihtsalt filtreerida põhimudeli kirjeid seotud andmete alusel, kasutage joins. Kui soovite saada põhimudeli koos seotud andmetega nende hilisemaks kasutamiseks ilma N+1 probleemideta, kasutage includes.