首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails中的嵌套关联/连接

rails中的嵌套关联/连接
EN

Stack Overflow用户
提问于 2012-06-22 10:03:18
回答 3查看 425关注 0票数 2

我有一个seat对象,它有一个car对象,它有一个owner,它有一个name。我希望同时显示car brandcarowner's name。如何在一个查询中完成此操作?

例如:

代码语言:javascript
复制
class Seat < ActiveRecord::Base
  belongs_to :car

  def description
    "I am in a #{car.brand} belonging to #{car.owner.name}"
    # --> how do I replace this with one query?
  end
end

我要指出的是,这是一个高度人为的例子,简化了我的问题。我连续数千次这样做,因此需要更高的效率。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-22 10:57:05

假设您正在尝试查询Seat模型,并且希望立即加载car和owner对象,则可以使用includes子句。

代码语言:javascript
复制
Seat.includes(:car => :owner).where(:color => :red).each do |seat|
  "I am in a #{seat.car.brand} belonging to #{seat.car.owner.name}"
end
票数 3
EN

Stack Overflow用户

发布于 2012-06-22 10:36:22

使用default_scope

代码语言:javascript
复制
class Seat
  default_scope includes([:car])
 end

class Car
  default_scope includes([:owner, :seats])
end
票数 0
EN

Stack Overflow用户

发布于 2012-06-22 10:46:15

对于我的应用程序中经常使用的多表连接,我在MySQL中创建了一个视图。然后基于视图创建一个ActiveRecord Rails模型。

根据支持视图的SQL语句,MySQL甚至可能允许视图是读/写的。但我只是走简单的路线,总是将视图视为只读的。您可以将AR模型设置为只读。

通过使用使用视图的活动记录模型,您可以快速读取数据库的单个查询。而且它们甚至比正常情况下更快,因为MySQL只为视图计算一次SQL“计划”,从而可以更快地使用它。

记住还要检查您的外键是否都已被索引。您不需要任何表扫描。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11149340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档