想象一下带有作者和书籍的Rails应用程序。在图书索引页面上,我们列出了每本书及其作者,如book.author.name
。
将会发生以下两件事之一:
book.author
,ActiveRecord将查询数据库以查找作者book.author
已预先加载(例如Book.includes(:author)
),则会从内存中提取对象在方案#1中,视图会导致N + 1查询 - 每次尝试呈现另一本书时,都必须执行另一本SELECT * from authors where author_id = $1
(使用{{1} })。
这对性能不利,往往难以追踪。如果控制器加载了视图所需的所有数据,那将会更好(恕我直言),并且视图根本无法触发查询。
有没有办法根据需要禁用ActiveRecord"#34;加载协会?换句话说,为了让方案#1引发一个异常,例如"关联不可用,请参阅有关预加载协会的文档"?