2010-10-20 90 views

回答

7

我不知道,但它看起來像你在Appointmentbelongs_to :serivcehas_many :appointmentsService類。正確?

在這種情況下,您的兩個示例之間不會有任何區別。 Rails會在兩種情況下執行2個查詢:

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 

如果,另一方面,你叫:

s = Service.find(123) 

,然後做一些事情,如:

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

等。在代碼中有很多地方,那麼對於數據庫來說,會有多少個這樣的調用的查詢(Rails 3在這裏非常聰明,所以如果你執行了s.appointments.each它實際上會獲取1個查詢中的所有約會) 。

在這種情況下,最好能夠撥打:

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

因爲那時Rails會僅執行2查詢:一個獲取Service和一個獲取所有的約會:

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)