我对在活动记录中急切加载的机制有点困惑。假设一个Book
模型有很多Pages
,我使用这个查询来取一本书:
@book = Book.find book_id, :include => :pages
现在这是我感到困惑的地方。我的理解是@book.pages
已经加载并且不会执行另一个查询。但是假设我想找到一个特定的页面,我会怎么做?
@book.pages.find page_id
# OR...
@book.pages.to_ary.find{|p| p.id == page_id}
我是否认为第一个示例将执行另一个查询,因此使急切加载毫无意义,或者活动记录足够聪明,知道它不需要执行另一个查询?
另外,我的第二个问题是,是否有一个论点是在某些情况下,急切加载在数据库上更加密集,有时多个小查询会比单个大查询更有效?
谢谢你的想法。