【问题标题】:Eager load differently nested polymorphic渴望加载不同的嵌套多态
【发布时间】:2013-04-15 15:29:26
【问题描述】:

使用 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 包含基于其关联的正确模型?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    我想我刚才也遇到了同样的问题。我在尝试加载关联时收到了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()-statement 只获取您需要的那些。

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 1970-01-01
      • 2016-05-31
      • 2014-08-30
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2014-02-24
      相关资源
      最近更新 更多