Является ли метод Rails 'find (x) для модели ленивым?Если нет, что эквивалентно?
Я новичок в Rails, поэтому я обнаружил, что пишу такие области:
class Course < ActiveRecord::Base
scope :by_instructor_id, lambda { |instructor_id| where(:instructor_id => instructor_id) }
scope :by_course_template_id, lambda { |course_template_id| where(:course_template_id => course_template_id ) }
scope :by_company_id, lambda { |company_id| joins(:instructor).merge(CompanyUser.by_company_id(company_id)) }
end
Это не много работы, но сейчасСпрашиваю себя ... если бы Rails предоставил им область видимости, мне не пришлось бы их писать.
Итак, Rails предлагает их?Могу ли я сделать что-то вроде приведенного ниже кода и заставить его выполнять только один вызов базы данных?
Company.find(params[:id]).instructors.courses
вместо
Course.by_company_id(params[:id])
Что правильно?Я знаю, что Course.by_company_id(params[:id])
- это только 1 вызов базы данных.Это очень знакомо для написания SQL или запросов в Hibernate.Но если вы можете написать по-другому, может быть, стоит?
Однако я не хочу писать Company.find(params[:id]).instructors.courses
, если это приведет к более чем одному вызову базы данных.Хотя я вижу преимущество, потому что это означает, что мне никогда не придется писать 3 области, которые я показал вам выше, но я беспокоюсь, что Company.find(x)
не ленив.Это так?