Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 表在Rails视图中呈现两次_Ruby On Rails - Fatal编程技术网

Ruby on rails 表在Rails视图中呈现两次

Ruby on rails 表在Rails视图中呈现两次,ruby-on-rails,Ruby On Rails,一般来说,我对Rails和编程都是新手,所以我可能在这里遗漏了一些基本的东西。我正在制作一个简单的运动跟踪器,有3个模型:运动(不同类型的运动表)、锻炼(该课时完成的运动表)、举重(两者之间的连接表,还包括每次完成的运动的重量、组数和重复次数) 问题:向训练添加多个练习后,“显示”视图上的表格会为每个练习呈现多个条目(屏幕截图:)。所有内容都已正确写入数据库 问题:如何以正确的方式进行渲染,我做错了什么 这是训练控制器: class WorkoutsController < Applica

一般来说,我对Rails和编程都是新手,所以我可能在这里遗漏了一些基本的东西。我正在制作一个简单的运动跟踪器,有3个模型:运动(不同类型的运动表)、锻炼(该课时完成的运动表)、举重(两者之间的连接表,还包括每次完成的运动的重量、组数和重复次数)

问题:向训练添加多个练习后,“显示”视图上的表格会为每个练习呈现多个条目(屏幕截图:)。所有内容都已正确写入数据库

问题:如何以正确的方式进行渲染,我做错了什么

这是训练控制器:

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
方法即可。 虽然有许多电梯,有自动为电梯的正确关联,所以不需要设置它手动