我有一个seat对象,它有一个car对象,它有一个owner,它有一个name。我希望同时显示car brand和car的owner's name。如何在一个查询中完成此操作?
例如:
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我要指出的是,这是一个高度人为的例子,简化了我的问题。我连续数千次这样做,因此需要更高的效率。
发布于 2012-06-22 10:57:05
假设您正在尝试查询Seat模型,并且希望立即加载car和owner对象,则可以使用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发布于 2012-06-22 10:36:22
class Seat
default_scope includes([:car])
end
class Car
default_scope includes([:owner, :seats])
end发布于 2012-06-22 10:46:15
对于我的应用程序中经常使用的多表连接,我在MySQL中创建了一个视图。然后基于视图创建一个ActiveRecord Rails模型。
根据支持视图的SQL语句,MySQL甚至可能允许视图是读/写的。但我只是走简单的路线,总是将视图视为只读的。您可以将AR模型设置为只读。
通过使用使用视图的活动记录模型,您可以快速读取数据库的单个查询。而且它们甚至比正常情况下更快,因为MySQL只为视图计算一次SQL“计划”,从而可以更快地使用它。
记住还要检查您的外键是否都已被索引。您不需要任何表扫描。
https://stackoverflow.com/questions/11149340
复制相似问题