ruby-on-rails Rails从关联中获取包括最后一行在内的所有数据

4jb9z9bj  于 2023-06-25  发布在  Ruby
关注(0)|答案(1)|浏览(129)

我有两个模型与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相关联。

im9ewurl

im9ewurl1#

如何创建一个这样的关联:

class Scheme < ActiveRecord::Base
  has_one :current_nav, -> { order('id DESC').limit(1) }, class_name: 'Nav'
end

现在您可以:

Schema.includes(:current_nav).all

或:

Schema.includes(:current_nav).last(10)

将仅急切地加载所查询的方案的最后一个NAV。

说明includesActiveRecord中从数据库中检索对象的方法之一。关于doc本身:

活动记录允许您预先指定要加载的所有关联。这可以通过指定Model.find调用的includes方法来实现。通过包含,活动记录确保使用尽可能少的查询数加载所有指定的关联。
而且,由于我们使用current_nav进行了关联设置,因此我们所要做的就是将其与includes一起使用,以便立即加载数据。请阅读ActiveRecord querying doc了解更多信息。

相关问题