渴望通过关联加载复杂的has_many

时间:2020-07-22 11:45:26

标签: ruby-on-rails activerecord

我通过关联具有以下has_many:

class User
  has_many :cards
  has_many :coupons, through: :cards
  has_many :subscriptions, through: :cards
end

class Card
  has_many :coupons
  has_many :subscriptions
end

class Coupon
  belongs_to :card
end

class Subscription
  belongs_to :card
end

我有一个user#index页面,该页面显示用户列表,并为每个用户显示他们拥有的每张卡的摘要:“ S”表示已订阅或当前有效优惠券的数量。

在控制器中,我加载@users:

@users = User.members.includes(:cards, :coupons, :subscriptions)

然后在模板中,使用演示者类使用以下代码显示我想要的内容:

if card.subscribed?
  'S'
else
  card.coupons.active.count
end

这有效,但是请求很慢。这似乎仍在触发每个加载订阅的用户的多个查询。项目符号gem甚至告诉我从控制器查询中删除:coupons和:subscriptions。

如何设置此页面的查询以有效加载。我知道我可以为此页面设置俄语玩偶缓存,但是将仅为此页面设置缓存解决方案。是否可以更有效地设置而不缓存?

0 个答案:

没有答案
相关问题