有啥办法可以避免过多的 ActiveRecord 调用?

Posted

技术标签:

【中文标题】有啥办法可以避免过多的 ActiveRecord 调用?【英文标题】:Is there any way to avoid excess ActiveRecord calls?有什么办法可以避免过多的 ActiveRecord 调用? 【发布时间】:2012-11-29 15:54:31 【问题描述】:

我在 Rails 控制器中有以下 ActiveRecord 调用(“filings#index”):

@filings = Filing.order("created_at DESC").limit(limit).offset(start).joins("LEFT OUTER JOIN companies ON companies.id=filings.company_id")

每个文件都属于_一家公司。我希望能够访问:

@filings.first.company

无需进行额外的 SQL 查询,因为这是首先完成 OUTER JOIN 的全部目的。但是,当我调用 @filings.first.company 时,它会执行一个附加查询:

SELECT "companies".* FROM "companies" WHERE "companies"."id" = 989 LIMIT 1

如何避免发生第二个查询?作为初始查询的结果,信息不应该已经存储了吗?

【问题讨论】:

***.com/questions/5452340/… 我相信这个问题已经在这里被问过很多次了。四处寻找预加载关联和包含。 Filing.includes(:company) 将在结果中包含公司关联。 寻找“急切加载” 【参考方案1】:

您需要包含数据库中的信息:

@filings = Filing.includes(:company).order("created_at DESC").offset(start).limit(limit)

给 John Naegle 和 tharrison 的小贴士

【讨论】:

以上是关于有啥办法可以避免过多的 ActiveRecord 调用?的主要内容,如果未能解决你的问题,请参考以下文章

java 判断条件过多怎么办?有啥好的解决办法吗?

带有 ActiveRecord 的 rails 3 中的 inverse_of 有啥限制

Rails 中的 Active Record 和 ORM 有啥区别?

强制停止运行ActiveRecord,避免mysql max_execution_time

按周/月/等和 ActiveRecord 分组?

有没有办法在后续 Rails 3 ActiveRecord 迁移中删除 id 列?