Sobes.tech
Middle

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ärast includes-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.