我有一个名为 Impression 的模型 - 它计算每张卡片(也是一个模型)的视图。我正在尝试用卡片打印一张表格,该表格在上个月至少有 10 次浏览。所以我开始 -
cards = Card.joins(:impressions).where("impressions.created_at > ? AND impressions.created_at < ?", Date.today-30.days, Date.today).uniq
然后我做了——
cards.select {|card| card.impressions.count >= 10 }
但它运行了很长时间。我想要更有效的东西。有什么想法可以计算展示次数并对其进行排序吗?
我想尽可能高效地完成它 - 不使用 N+1 问题迭代整个数据库,因为它可能会变得非常难看。
你的印象表的 created_at 列有索引吗?
如果您正在查询它并且没有 - 您可以通过生成迁移文件来添加它。
add_index(:impressions, :created_at)
您可以使用纯 SQL 向查询添加条件,例如:
cards = Card.joins(:impressions).where("impressions.created_at > ? AND impressions.created_at < ?", Date.today-30.days, Date.today).group('cards.id').having('COUNT(impressions.*) >= 10')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句