是否可以预先加载(通过includes()或类似的)委托关联?
当我尝试我希望的显而易见的解决方案时(假设ModelA属于ModelB,而ModelB又属于Model C):
ModelA.includes(:modelB, :modelC)
我得到一个错误,因为ModelA不知道模型C.
我向ModelA添加了一个代表团:
delegate :modelC, to: :modelB, allow_nil: false
允许类似的内容:
ModelA.first.modelC
但是没有解决include()问题。
应该怎么做?
答案 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
我希望这会有所帮助!