gpt4 book ai didi

ruby-on-rails - 渴望加载不同的嵌套多态

转载 作者:行者123 更新时间:2023-12-03 08:30:18 24 4
gpt4 key购买 nike

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

  • 评论 => 可评论(国家或商店)
  • 国家 => 国家日 => 商店 => 照片
  • 购买 => 照片

我有以下内容:

@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()-statement 以仅获取您需要的那些。

关于ruby-on-rails - 渴望加载不同的嵌套多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16152031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com