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

まだ最初のバージョンを使用します。個人的には、2番目の解決策が好きです。

于 2013-03-12T08:28:41.730 に答える