有啥办法可以避免过多的 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 调用?的主要内容,如果未能解决你的问题,请参考以下文章
带有 ActiveRecord 的 rails 3 中的 inverse_of 有啥限制
Rails 中的 Active Record 和 ORM 有啥区别?