渴望加载不同的嵌套多态

使用Rails 3.2。 我的模型以这样的方式嵌套:

  • 评论=>可审核(国家或商店)
  • 国家=> CountryDay =>商店=>照片
  • 商店=>照片

我有以下内容:

@reviews = @user.reviews.includes(:user, :reviewable) 

通常我们可以通过以下方式包含嵌套的多态:

 # this will return errors because :shop is not found in the model Shop (:reviewable is actually :shop) @reviews = @user.reviews.includes(:user, :reviewable => [:shop]) # this will return errors because :photos is not directly associated to Country @reviews = @user.reviews.includes(:user, :reviewable => :photos) 

还有许多其他变种。 我如何解决它使ActiveRecord包含基于其关联的正确模型?

我想我刚才有同样的问题。 尝试加载关联时,我得到了一个ActiveRecord::EagerLoadPolymorphicError 。 我的解决方案是组合一个自定义连接语句,我已将其放入范围以便于使用。

未经测试,但这可能会让你前进:

 class Review < ActiveRecord::Base scope :eagerly_loaded, -> { joins(' INNER JOIN shops ON (reviews.reviewable_type = "Shop" AND reviews.reviewable_id = shops.id) INNER JOIN countries ON (reviews.reviewable_type = "Country" reviews.reviewable_id = countries.id) ') } end 

然后使用@user.reviews.eagerly_loaded 。 确保使用匹配的.group .group()语句来获取所需的。