嵌套关联/加入rails

时间:2012-06-22 02:03:18

标签: ruby-on-rails activerecord

我有一个seat对象,其car对象的owner对象为name。我想一起显示car brandcar的{​​{1}}个owner。如何在一个查询中执行此操作?

例如:

name

我会注意到这是一个非常人为的例子来简化我的问题。我连续数千次这样做,因此需要提高效率。

3 个答案:

答案 0 :(得分:3)

我们假设您正在尝试查询Seat模型,并且您希望加载汽车和所有者对象,您可以使用includes子句。

Seat.includes(:car => :owner).where(:color => :red).each do |seat|
  "I am in a #{seat.car.brand} belonging to #{seat.car.owner.name}"
end

答案 1 :(得分:0)

使用default_scope

class Seat
  default_scope includes([:car])
 end

class Car
  default_scope includes([:owner, :seats])
end

答案 2 :(得分:0)

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

根据为视图提供动力的SQL语句,MySQL甚至可以让View进行读/写。但我只是走简单的路线,并始终将视图视为只读。您可以将AR模型设置为只读。

通过使用使用视图的Active Record模型,您可以快速单次查询数据库。而且它们甚至比平时更快,因为MySQL为视图计算一次SQL“计划”,从而更快地使用它。

请记住还检查您的外键是否都已编入索引。您不希望任何表扫描。