Я не уверен, но, похоже, у вас есть belongs_to :serivce
в классе Appointment
и has_many :appointments
в классе Service
. Правильно?
В этом случае не будет никакой разницы между вашими 2 примерами. 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)