渴望加载代表?

时间:2015-01-19 08:57:21

标签: ruby-on-rails activerecord rails-activerecord

是否可以预先加载(通过includes()或类似的)委托关联?

当我尝试我希望的显而易见的解决方案时(假设ModelA属于ModelB,而ModelB又属于Model C):

ModelA.includes(:modelB, :modelC)

我得到一个错误,因为ModelA不知道模型C.

我向ModelA添加了一个代表团:

delegate :modelC, to: :modelB, allow_nil: false

允许类似的内容:

ModelA.first.modelC

但是没有解决include()问题。

应该怎么做?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,我相信您可以使用热切的加载方式

class ModelA
  delegate :modelC, to: :modelB, allow_nil: false
  belongs_to :modelB
  belongs_to :modelC
end

class ModelB
  has_many :modelAs
  belongs_to :modelC
end

class ModelC
  has_many :modelBs
  has_many :modelAs, through: :modelBs
end

我认为您应该能够执行的操作(仅供参考,我自己实际上还没有运行过此操作):

ModelA.includes(ModelB: :ModelC).first.modelC

Rails Guides - Nested Associations Hash中有一些与此相关的信息, Rails api documention

我希望这会有所帮助!