2010-10-20 15 views

Odpowiedz

7

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) 
Powiązane problemy