在Rails中使用连接模型。将项添加到列表中

时间:2013-04-01 02:47:00

标签: ruby-on-rails

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

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

在我的联接表中,我有额外的列与每个练习相关联,例如要执行的集合和重复次数。所以我的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

在我的workouts_controller中我有

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 %>

感谢您的帮助!

2 个答案:

答案 0 :(得分: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_controller ##确保在@workout_exercise中实例化show

def show
    @workout = Workout.find(params[:id])
    @workout_exercise = @workout.workout_exercises
end
github for explainz

https://github.com/twairball/workoutapp

答案 1 :(得分:0)

我让this Gist准确地说明了如何做到这一点。一步一步。