Sobes.tech
Middle

Koja je razlika između Joins i Includes u Ruby on Rails?

sobes.tech АИ

Одговор од АИ

joins se koristi za izvršavanje SQL JOIN operatora, kako bi se odabrali podaci na osnovu veza između tabela, ali učitavaju se samo kolone glavnog modela.

includes se koristi za rešavanje problema N+1 upita. Izvršava ili jedan SQL upit sa LEFT OUTER JOIN (ako nema uslova na uključene asocijacije), ili dva SQL upita (jedan za glavni model, drugi za povezane), kako bi učitao sve podatke povezanih modela zajedno sa glavnim, izbegavajući više dodatnih upita.

Ključne razlike:

  • Svrha: joins - filtriranje/izbor na osnovu veza; includes - optimizacija učitavanja povezanih podataka (N+1).
  • SQL upit: joins - obično INNER JOIN (ali može biti i drugi); includes - LEFT OUTER JOIN ili dva odvojena upita.
  • Učitavanje podataka: joins - učitava samo glavni model, povezani podaci nisu dostupni bez dodatnih upita; includes - učitava glavni model i povezane modele.
  • Pristup povezanim podacima: Nakon joins, pristup povezanim podacima zahteva dodatne upite. Nakon includes, pristup povezanim podacima ne zahteva dodatne upite.
# Primer korišćenja joins
# Pronađi korisnike koji imaju bar jedan post
User.joins(:posts)
# Primer korišćenja includes
# Učitaj sve korisnike i njihove postove u jednom ili dva upita
User.includes(:posts).each do |user|
  user.posts.each do |post|
    # Pristup postu bez dodatnog upita
    puts post.title
  end
end

Izbor između joins i includes zavisi od zadatka: ako želiš samo da filtriraš zapise glavnog modela na osnovu povezanih podataka, koristi joins. Ako želiš da dobiješ glavni model zajedno sa povezanim podacima za kasniju upotrebu bez problema N+1, koristi includes.