【发布时间】:2022-11-04 05:51:51
【问题描述】:
在我们的 Rails 应用程序中,我们有两个表:
products:
- id
- name
feedbacks
- id
- product_id
- rating
因此,产品可以有许多具有评级 (1-5) 的反馈。
我们想要做的是通过使用 (4-5) 表示最佳和 (1-2) 表示最差来计算每个产品的反馈数量,从而获得最好和最差的产品。
但是,我们还需要考虑产品的反馈总数,否则如果一个产品碰巧比另一个产品有更多的反馈,它最终可能是最好的和最差的......
例如,我们尝试了以下“应该”返回反馈评级为 4+ 的产品列表,然后第一个元素将是最高的。
Product.joins(:feedbacks).group('feedbacks.rating').having('Max(rating) >= 4')
第一个问题......这是返回这个的正确方法吗?有没有更好的方法来只返回一条记录而不是返回 ActiveRecord 关系并提取第一条记录?
第二个问题......我们如何考虑对产品的反馈数量?所以查询变成了......“对产品的反馈总数评分 4+”
【问题讨论】:
-
在大型数据库中,您不会有一个后台作业来更新产品记录上的字段以进行计算吗?也许
total_reviews和average_review_score?
标签: ruby-on-rails