0

这似乎是一个非常基本的问题,但我在互联网上的任何地方都没有找到关于如何做到这一点的解释,我想很多人都有这个问题。

我有三个模型:运动、锻炼和锻炼_锻炼(连接表)

在我的连接表中,我有与每个练习相关的额外列,例如要执行的组数和重复次数。所以我的workout_exercises表是这样的:

    t.integer  "workout_id"
    t.integer  "exercise_id"
    t.integer  "repetitions"
    t.integer  "set"
    t.integer  "rest"

我可以将练习添加到锻炼中,并且在我的锻炼显示视图中,我有一个与每个练习相关的练习列表。

我不知道如何在锻炼显示视图中显示每个练习的组数、重复次数和休息时间。

这是我的模型代码:

class Exercise < ActiveRecord::Base
  attr_accessible :name, :description, :photo, :video

  has_many :workout_exercises 
  has_many :workouts, :through => :workout_exercises
end

class Workout < ActiveRecord::Base
  attr_accessible :name

  has_many :workout_exercises
  has_many :exercises, :through => :workout_exercises

end

class WorkoutExercise < ActiveRecord::Base
  attr_accessible :exercise_id, :repetitions, :rest, :set, :workout_id

  belongs_to :exercise
  belongs_to :workout
end

在我的锻炼控制器中,我有

class WorkoutsController < ApplicationController     
     before_filter :get_workouts, :only => [:show, :edit, :update, :destroy]
     before_filter :get_exercises, :only => [:show]    

     def get_exercises
        @workout_exercise = @workout.exercises
      end

    def get_workouts
        @workout = Workout.find(params[:id])
      end

最后,我的锻炼显示视图中有这个表格:

<% @workout_exercise.each do |exercise| %>
  <%= exercise.name %>
<% end %>

谢谢您的帮助!

4

2 回答 2

3

您要查找的字段在workout_exercises表中。

workouts_controller

def get_exercises
    @workout_exercise = @workout.workout_exercises
end

在您看来,您可以按如下方式列出信息——练习的名称仍然存在,exercise但每个workout_exercise都引用了exercise

<% @workout_exercise.each do |w| %>
    Name: <%= w.exercise.name %>
    Set: <%= w.set %>
    Reps: <%= w.repetitions %>
    Rest: <%= w.rest %>
<% end %>

编辑-锻炼控制器##确保在以下@workout_exercise位置实例化show

def show
    @workout = Workout.find(params[:id])
    @workout_exercise = @workout.workout_exercises
end
用于解释的 github

https://github.com/twairball/workoutapp

于 2013-04-10T15:34:12.700 回答
0

我制作这个 Gist是为了准确展示如何做到这一点。一步步。

于 2013-07-30T05:43:26.680 回答