新手问题 如何判断什么时候用 Aggregate 方法 什么时候应该新建一个 column?

fidel · 2019年11月01日 · 最后由 fidel 回复于 2019年11月04日 · 2278 次阅读

各位大佬,问个新手问题,什么时候用 Aggregate 方法,什么时候应该新建一个 column?

比如说,我有一个 exercises 的表和对应的 model: Exercise,然后有一个 user_activity_exercises 的表和对应的 model: UserActivityExercise.

user_activity_exercises 有一个 reps 的 column 用来记录每次用户做了多少个 rep。

如果在 ExercisesController 的 index 的 view 的表格里面需要用到 exercise 对应的 user_activity_exercises 的总数,以及 reps 的总数。 为了避免 N+1 和方便排序可以用 aggregate 的方法, @exercises = Exercise.left_joins(:user_activity_exercises).select('exercises.*, COUNT(user_activity_exercises.id) as workouts_count, SUM(user_activity_exercises.reps_count) as reps_count').group("exercises.id").distinct

我知道 rails 有一个 counter cache 的方法可以用来统计 exercise 对应的 user_activity_exercises 的数量,排序也很方便,有对应的 column,但是好像 reps 的总数只能用 aggregate 的方法来算了。

我想问的是,需要在 exercises 的表创建新的 column 来存放 reps 的总数吗?怎么来做这个取舍?感觉加一个新的 column,然后再给 user_activity_exercise 加上对应的 after_commit 的 callback 方法去更新 exercise 对应的 column 的值就可以避免使用 aggregate 方法了?

常用就加,不常用就等等看。

Rei 回复

谢谢大佬

需要 登录 后方可回复, 如果你还没有账号请 注册新账号