我可以在ActiveRecord中禁用自动加载关联吗?

时间:2016-02-18 16:23:54

标签: rails-activerecord

想象一下带有作者和书籍的Rails应用程序。在图书索引页面上,我们列出了每本书及其作者,如book.author.name

将会发生以下两件事之一:

  1. 如果尚未加载book.author,ActiveRecord将查询数据库以查找作者
  2. 如果book.author已预先加载(例如Book.includes(:author)),则会从内存中提取对象
  3. 在方案#1中,视图会导致N + 1查询 - 每次尝试呈现另一本书时,都必须执行另一本SELECT * from authors where author_id = $1(使用{{1} })。

    这对性能不利,往往难以追踪。如果控制器加载了视图所需的所有数据,那将会更好(恕我直言),并且视图根本无法触发查询。

    有没有办法根据需要禁用ActiveRecord"#34;加载协会?换句话说,为了让方案#1引发一个异常,例如"关联不可用,请参阅有关预加载协会的文档"?

0 个答案:

没有答案