Czy w Railsach 3 są one takie same, czy różne? Czym się różnią?Szyny 3: Leniwe ładowanie a chętne ładowanie
o = Appointment.find(297)
o.service
o = Appointment.includes(:service).find(297)
o.service
Czy w Railsach 3 są one takie same, czy różne? Czym się różnią?Szyny 3: Leniwe ładowanie a chętne ładowanie
o = Appointment.find(297)
o.service
o = Appointment.includes(:service).find(297)
o.service
Nie jestem pewien, ale wygląda na to, że masz belongs_to :serivce
w klasie Appointment
i has_many :appointments
klasy Service
. Poprawny?
W takim przypadku nie będzie żadnej różnicy między 2 przykładami. Szyny wykona 2 zapytań w obu przypadkach:
Appointment Load (0.0ms) SELECT "appointments".* FROM "appointments" WHERE ("appointments"."id" = 1) LIMIT 1
Service Load (0.0ms) SELECT "services".* FROM "services" WHERE ("services"."id" = 1) LIMIT 1
Jeśli, z drugiej strony, to wołały:
s = Service.find(123)
a następnie zrobić coś takiego:
s.appointments.find(1)
s.appointments.find(2)
itd w wiele miejsc w kodzie, wtedy będzie tyle zapytań do bazy danych, ile jest tych połączeń (Rails 3 jest tutaj całkiem sprytny, więc jeśli wykonasz s.appointments.each
, to faktycznie pobierze wszystkie spotkania w 1 zapytaniu) .
W takim przypadku byłoby lepiej zadzwonić:
s = Service.include(:appointments).find(123)
bo wtedy Szyny wykona tylko 2 zapytania: jeden do sprowadzenia Service
i jeden sprowadzić wszystkie nominacje:
Service Load (0.0ms) SELECT "services".* FROM "services" WHERE ("services"."i
d" = 123) LIMIT 1
Appointment Load (0.0ms) SELECT "appointments".* FROM "appointments" WHERE ("
appointments".service_id = 123)