如何用一个查询急切地加载这些关联
class Pair < ActiveRecord::Base
belongs_to :user
belongs_to :buddy, :class_name => "User"
end
class PairsController < ApplicationController
def show
@pair = Pair.includes(:user, :buddy).find(params[:id])
end
end
查询如下:
对负载(3.1 ms)从
pairs
中选择pairs
*,其中pairs
id
=935029848限制1用户负载(4.3ms)从(965902799)中的
users
WHEREusers
id
选择users.id用户负载(0.9ms)从(274512568)中的
users
WHEREusers
id
选择users.id但我想得到:
对负载(3.1 ms)从
pairs
中选择pairs
*,其中pairs
id
=935029848限制1用户负载(4.3ms)在(965902799274512568)中的
users
位置users
id
选择users.id 最佳答案
我认为您现在不能在rails中这样做,因为rails默认假设不同的关联有不同的表,并且它不能在紧急加载时将来自不同关联的include合并到一个查询中,即使这些关联有相同的表。
更新:此外,我认为这甚至是不可行的,因为如果你考虑你的数据关系:你试图加载一对用户和好友,当你用2个查询时,它非常简单,你知道谁是用户和谁是好友,但是想想当你用1个查询时,你怎么知道检索到的记录是用户还是好友不可能百分之百地知道。
关于ruby-on-rails - 相同模型的两个关联的热切加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9698081/