1

我看了这个 rails cast http://railscasts.com/episodes/22-eager-loading但我仍然对为这样的场景编写有效的 GET REST 服务的最佳方法是什么感到困惑:

假设我们有一个组织表,并且还有大约 20 个其他表,它们之间存在一个belongs_tohas_many关系。(所以所有这些表都有一个organization_id字段)。

现在,我想以 Rails REST 服务的形式编写一个 GET 和 INDEX 请求,该服务基于传递给 URL 中请求的组织 ID,它可以读取这些表并填充 JSON,但不能填充所有这些表,仅针对其中的几个,例如让我们假设患者、订单和访问表,而不是所有这 20 个表。

所以我仍然很难弄清楚如何写这样一个

.find( :all )  

什么样的查询?有人可以展示一些示例,以便我了解如何进行此类查询吗?

4

1 回答 1

2

您可以在一个 SQL 查询中包含所有这些表:

@organization = Organization.includes(:patients, :orders, :visits).find(1)

现在,当您执行以下操作时:

@organization.patients

它将在内存中加载患者,因为它已经在原始查询中获取了它们。没有includes,@organization.patients会触发另一个数据库查询。这就是为什么它被称为“急切加载”的原因,因为您patients在实际引用它们之前(急切地)加载了组织的数据,因为您知道以后会需要这些数据。

includes无论使用all与否,您都可以随时使用。就我个人而言,当我将方法链接到模型上时,我发现它更加明确和清晰includes,而不是将其作为某种散列选项包含在内(如 Railscast 剧集中)。

于 2013-02-07T04:26:37.557 回答