Ruby on rails 表在Rails视图中呈现两次
一般来说,我对Rails和编程都是新手,所以我可能在这里遗漏了一些基本的东西。我正在制作一个简单的运动跟踪器,有3个模型:运动(不同类型的运动表)、锻炼(该课时完成的运动表)、举重(两者之间的连接表,还包括每次完成的运动的重量、组数和重复次数) 问题:向训练添加多个练习后,“显示”视图上的表格会为每个练习呈现多个条目(屏幕截图:)。所有内容都已正确写入数据库 问题:如何以正确的方式进行渲染,我做错了什么 这是训练控制器:Ruby on rails 表在Rails视图中呈现两次,ruby-on-rails,Ruby On Rails,一般来说,我对Rails和编程都是新手,所以我可能在这里遗漏了一些基本的东西。我正在制作一个简单的运动跟踪器,有3个模型:运动(不同类型的运动表)、锻炼(该课时完成的运动表)、举重(两者之间的连接表,还包括每次完成的运动的重量、组数和重复次数) 问题:向训练添加多个练习后,“显示”视图上的表格会为每个练习呈现多个条目(屏幕截图:)。所有内容都已正确写入数据库 问题:如何以正确的方式进行渲染,我做错了什么 这是训练控制器: class WorkoutsController < Applica
class WorkoutsController < ApplicationController
def index
@workouts = Workout.all
end
def new
@workout = Workout.new
@lift = Lift.new
end
def create
@workout = Workout.new(params[:workout])
@workout.save
@lift = Lift.new(params[:lift])
@lift.workout_id = @workout.id
@lift.save
redirect_to @workout
end
def show
@workout = Workout.find(params[:id])
end
def edit
@workout = Workout.find(params[:id])
end
def update
@workout = Workout.find(params[:id])
@lift = Lift.new(params[:lift])
@lift.workout_id = @workout.id
@lift.save
redirect_to @workout
end
end
class WorkoutsController
这是显示视图
<h1> Workout Number <%= @workout.id %></h1>
<div class="container">
<table class="table table-striped">
<thead>
<th>Excercize</th>
<th>Sets</th>
<th>Reps</th>
<th>Weight</th>
</thead>
<tbody>
<% @workout.exercises.each do |w| %>
<% @workout.lifts.each do |e| %>
<tr>
<td><%= w.name %></td>
<td><%= e.sets %></td>
<td><%= e.reps %></td>
<td><%= e.weight %></td>
</tr>
</tbody>
<% end %>
<% end %>
</table>
</div>
<div class="btn btn-primary">
Add Exercise
<%= link_to 'Add Exercise', edit_workout_path %>
</div>
训练编号
锻炼
设置
代表
重量
加练习
编辑添加训练模型:
class Workout < ActiveRecord::Base
attr_accessible :id, :title, :body
has_many :lifts
accepts_nested_attributes_for :lifts
has_many :exercises, through: :lifts
end
课堂训练
而升降机型号
class Lift < ActiveRecord::Base
attr_accessible :reps, :sets, :weight, :id,
:workout_id, :exercise_id, :exercise_name
belongs_to :exercise
belongs_to :workout
end
class Exercise < ActiveRecord::Base
attr_accessible :name, :primary_area, :secondary_area,
:id
has_many :lifts
accepts_nested_attributes_for :lifts
has_many :workouts, through: :lifts
def name_for_select
name.capitalize
end
end
classlift
锻炼模式
class Lift < ActiveRecord::Base
attr_accessible :reps, :sets, :weight, :id,
:workout_id, :exercise_id, :exercise_name
belongs_to :exercise
belongs_to :workout
end
class Exercise < ActiveRecord::Base
attr_accessible :name, :primary_area, :secondary_area,
:id
has_many :lifts
accepts_nested_attributes_for :lifts
has_many :workouts, through: :lifts
def name_for_select
name.capitalize
end
end
课堂练习
您的锻炼是两次的,因为您重复了两次您的@训练
模型:
<% @workout.exercises.each do |w| %>
<% @workout.lifts.each do |e| %>
<tr>
<td><%= w.name %></td>
<td><%= e.sets %></td>
<td><%= e.reps %></td>
<td><%= e.weight %></td>
</tr>
</tbody> <!-- remove this tag out of the scope -->
<% end %>
<% end %>
要使所有工作正常进行,您需要以下内容:
<% @workout.exercises.inlcludes(:lifts).each do |exercise| %>
<tr>
<td><%= exercise.name %></td>
<td><%= exercise.lifts.first.sets %></td>
<td><%= exercise.lifts.first.reps %></td>
<td><%= exercise.lifts.first.weight %></td>
</tr>
<% end %>
</tbody>
您的锻炼是两次的,因为您重复了两次您的
@训练
模型:
<% @workout.exercises.each do |w| %>
<% @workout.lifts.each do |e| %>
<tr>
<td><%= w.name %></td>
<td><%= e.sets %></td>
<td><%= e.reps %></td>
<td><%= e.weight %></td>
</tr>
</tbody> <!-- remove this tag out of the scope -->
<% end %>
<% end %>
要使所有工作正常进行,您需要以下内容:
<% @workout.exercises.inlcludes(:lifts).each do |exercise| %>
<tr>
<td><%= exercise.name %></td>
<td><%= exercise.lifts.first.sets %></td>
<td><%= exercise.lifts.first.reps %></td>
<td><%= exercise.lifts.first.weight %></td>
</tr>
<% end %>
</tbody>
您的锻炼是两次的,因为您重复了两次您的
@训练
模型:
<% @workout.exercises.each do |w| %>
<% @workout.lifts.each do |e| %>
<tr>
<td><%= w.name %></td>
<td><%= e.sets %></td>
<td><%= e.reps %></td>
<td><%= e.weight %></td>
</tr>
</tbody> <!-- remove this tag out of the scope -->
<% end %>
<% end %>
要使所有工作正常进行,您需要以下内容:
<% @workout.exercises.inlcludes(:lifts).each do |exercise| %>
<tr>
<td><%= exercise.name %></td>
<td><%= exercise.lifts.first.sets %></td>
<td><%= exercise.lifts.first.reps %></td>
<td><%= exercise.lifts.first.weight %></td>
</tr>
<% end %>
</tbody>
您的锻炼是两次的,因为您重复了两次您的
@训练
模型:
<% @workout.exercises.each do |w| %>
<% @workout.lifts.each do |e| %>
<tr>
<td><%= w.name %></td>
<td><%= e.sets %></td>
<td><%= e.reps %></td>
<td><%= e.weight %></td>
</tr>
</tbody> <!-- remove this tag out of the scope -->
<% end %>
<% end %>
要使所有工作正常进行,您需要以下内容:
<% @workout.exercises.inlcludes(:lifts).each do |exercise| %>
<tr>
<td><%= exercise.name %></td>
<td><%= exercise.lifts.first.sets %></td>
<td><%= exercise.lifts.first.reps %></td>
<td><%= exercise.lifts.first.weight %></td>
</tr>
<% end %>
</tbody>
是的,你是新来的,我看到你的控制器后就不再看你的问题了,所以我会给你一些帮助,帮助你编写更好的控制器
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def update
workout = Workout.find(params[:id])
workout.lifts.create params[:lift]
redirect_to workout
end
不要创建一个新对象,然后保存它-只需直接调用create
方法即可。
虽然有许多升降机,但升降机自动具有正确的关联,因此无需手动设置
很抱歉,我只是想让您知道如何编写更好的控制器:-)
编辑
或者干脆干掉
class WorkoutsController < ApplicationController
def index
@workouts = Workout.all
end
def new
@workout = Workout.new
@lift = Lift.new
end
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def show
@workout = current_workout
end
def edit
@workout = current_workout
end
def update
current_workout.lifts.create params[:lift]
redirect_to current_workout
end
private
def current_workout
Workout.find params[:id]
end
end
顺便说一句:不要只是复制这个控制器,我很确定你的整个训练/举重逻辑是关闭的 是的,你是新来的,我看到你的控制器后就不再看你的问题了,所以我会给你一些帮助,帮助你编写更好的控制器
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def update
workout = Workout.find(params[:id])
workout.lifts.create params[:lift]
redirect_to workout
end
不要创建一个新对象,然后保存它-只需直接调用create
方法即可。
虽然有许多升降机,但升降机自动具有正确的关联,因此无需手动设置
很抱歉,我只是想让您知道如何编写更好的控制器:-)
编辑
或者干脆干掉
class WorkoutsController < ApplicationController
def index
@workouts = Workout.all
end
def new
@workout = Workout.new
@lift = Lift.new
end
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def show
@workout = current_workout
end
def edit
@workout = current_workout
end
def update
current_workout.lifts.create params[:lift]
redirect_to current_workout
end
private
def current_workout
Workout.find params[:id]
end
end
顺便说一句:不要只是复制这个控制器,我很确定你的整个训练/举重逻辑是关闭的 是的,你是新来的,我看到你的控制器后就不再看你的问题了,所以我会给你一些帮助,帮助你编写更好的控制器
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def update
workout = Workout.find(params[:id])
workout.lifts.create params[:lift]
redirect_to workout
end
不要创建一个新对象,然后保存它-只需直接调用create
方法即可。
虽然有许多升降机,但升降机自动具有正确的关联,因此无需手动设置
很抱歉,我只是想让您知道如何编写更好的控制器:-)
编辑
或者干脆干掉
class WorkoutsController < ApplicationController
def index
@workouts = Workout.all
end
def new
@workout = Workout.new
@lift = Lift.new
end
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def show
@workout = current_workout
end
def edit
@workout = current_workout
end
def update
current_workout.lifts.create params[:lift]
redirect_to current_workout
end
private
def current_workout
Workout.find params[:id]
end
end
顺便说一句:不要只是复制这个控制器,我很确定你的整个训练/举重逻辑是关闭的 是的,你是新来的,我看到你的控制器后就不再看你的问题了,所以我会给你一些帮助,帮助你编写更好的控制器
def create
workout = Workout.create params[:workout]
workout.lifts.create params[:lift]
redirect_to workout
end
def update
workout = Workout.find(params[:id])
workout.lifts.create params[:lift]
redirect_to workout
end
不要创建一个新对象,然后保存它-只需直接调用create
方法即可。
虽然有许多电梯,有自动为电梯的正确关联,所以不需要设置它手动