0

我有一个用户锻炼的集合。锻炼包含一系列练习。每个练习都有一个类别。

我想遍历锻炼集合并按锻炼类别对它们进行分组。

让我失望的是它exercise_workouts是一个连接模型。例如:

#<ExerciseWorkout id: 50, exercise_id: 14, workout_id: 42, description: nil, created_at: "2013-03-12 08:15:17", updated_at: "2013-03-12 08:15:17", user_id: nil>

.exercises
  %h1.exercise-type-title Lifting Exercises
  = render @workout.exercise_workouts

我想@workout.exercise_workouts通过练习按可用类别呈现部件组。所以我会看到类似的东西

.exercises
  %h1.exercise-type-title Lifting Exercises
  = render @workout.exercise_workouts (lifting)
  %h1.exercise-type-title Running Exercises
  = render @workout.exercise_workouts (running)

不知道该怎么做?并且也不希望对每个类别进行硬编码,而只列出通过智能迭代器可用的内容。

4

1 回答 1

1

你能试试下面的(我不确定我是否有基于类的部分正确的名称exercise_workouts

@workout.exercise_workouts.group_by(&:category).each do |category, exercises|
  = render partial: '/exercise_workouts/exercise_workout', collection: exercises, locals: { category: category }

更新:访问类别exercise

您可以将循环更改为

@workout.exercise_workouts.group_by { |ew| ew.exercise.category }.each do |category, exercises|
  = render partial: '/exercise_workouts/exercise_workout', collection: exercises, locals: { category: category }

或者您可以将类别属性委托给在 exercise_workout 模型上锻炼

#exercise_workout.rb
delegate :category, to: :exercise

并且仍然使用第一个版本。就个人而言,我更喜欢第二种解决方案。

于 2013-03-12T08:28:41.730 回答