我有两个模型与has_many属于关系。
Scheme has_many navs
我需要获取所有的方案,只有最后的导航值。我有10个计划,每个计划有大约100K的导航,但我只需要最后的记录,这是目前的价值。
与渴望加载将加载所有的导航
Scheme.all.includes(:navs)
我如何应用条件来获得每个方案的最后一行导航,而渴望加载。
使用日志更新
如果我逃跑
Scheme.includes(:current_nav).limit(3)
这些是AR执行的查询
SELECT `schemes`.* FROM `schemes` LIMIT 3
SELECT `navs`.* FROM `navs` WHERE `navs`.`schemeCode` IN ('D04', 'D01', 'D30') ORDER BY id DESC
第二个查询是如何工作的,它将获取schemeCode福尔斯list的所有navs,并按id DESC对它们进行排序,但它将如何与特定的scheme相关联。
1条答案
按热度按时间im9ewurl1#
如何创建一个这样的关联:
现在您可以:
或:
将仅急切地加载所查询的方案的最后一个NAV。
说明:
includes
是ActiveRecord
中从数据库中检索对象的方法之一。关于doc本身:活动记录允许您预先指定要加载的所有关联。这可以通过指定Model.find调用的includes方法来实现。通过包含,活动记录确保使用尽可能少的查询数加载所有指定的关联。
而且,由于我们使用
current_nav
进行了关联设置,因此我们所要做的就是将其与includes
一起使用,以便立即加载数据。请阅读ActiveRecord querying doc了解更多信息。