2010-10-20 21 views

Antwort

7

Ich bin nicht sicher, aber es sieht aus wie Sie belongs_to :serivce in der Appointment Klasse und has_many :appointments die Service Klasse. Richtig?

In diesem Fall gibt es keinen Unterschied zwischen Ihren 2 Beispielen. Rails 2 Abfragen in beiden Fällen durchführen:

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 

Wenn auf der anderen Seite, Sie riefen:

s = Service.find(123) 

und dann so etwas wie:

s.appointments.find(1) 
s.appointments.find(2) 

etc. viele Stellen im Code, dann würde es so viele Anfragen an die Datenbank geben wie die Anzahl dieser Aufrufe (Rails 3 ist hier ziemlich schlau, also wenn Sie s.appointments.each ausgeführt hätten, würde es tatsächlich alle Termine in einer Abfrage holen) .

In diesem Fall würde es besser sein zu nennen:

s = Service.include(:appointments).find(123) 

weil dann Rails nur zwei Abfragen ausführen wird: zum einen die Service und ein holen alle Termine zu holen:

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)