我通过关联具有以下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。
如何设置此页面的查询以有效加载。我知道我可以为此页面设置俄语玩偶缓存,但是将仅为此页面设置缓存解决方案。是否可以更有效地设置而不缓存?