各位大佬,问个新手问题,什么时候用 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 方法了?