如何用一个查询急切地加载这些关联

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*,其中pairsid=935029848限制1
用户负载(4.3ms)从(965902799)中的usersWHEREusersid选择users.id
用户负载(0.9ms)从(274512568)中的usersWHEREusersid选择users.id
但我想得到:
对负载(3.1 ms)从pairs中选择pairs*,其中pairsid=935029848限制1
用户负载(4.3ms)在(965902799274512568)中的users位置usersid选择users.id

最佳答案

我认为您现在不能在rails中这样做,因为rails默认假设不同的关联有不同的表,并且它不能在紧急加载时将来自不同关联的include合并到一个查询中,即使这些关联有相同的表。
更新:此外,我认为这甚至是不可行的,因为如果你考虑你的数据关系:你试图加载一对用户和好友,当你用2个查询时,它非常简单,你知道谁是用户和谁是好友,但是想想当你用1个查询时,你怎么知道检索到的记录是用户还是好友不可能百分之百地知道。

关于ruby-on-rails - 相同模型的两个关联的热切加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9698081/

10-13 00:22