我认为这很简单,但在任何地方都找不到关于如何做到这一点的解释。
我有一个配置文件页面,该页面有一个表单,提交时应该通过CompletedSetsController
但我不知道如何告诉 form_for 我想通过已经编写的创建/更新,而不是在 ProfilesControllerCompletedSetsController
中重写 CRUDCompletedSets
我CompletedSetsController
的是脚手架生成的 CRUD 控制器。
这是我的表格:
现在,这个表单只有在我放入@completed_set = CompletedSet.new
.时才有效ProfileController
,但这不是很干燥,特别是如果我必须重写 ProfilesController 中的创建和更新方法。
<%= form_for(@completed_set) do |f| %>
<tr>
<td><%= we.exercise.name %>
<%= f.hidden_field :exercise_id, :value => we.exercise.id %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :program_id, :value => @user_program.id %>
<%= f.hidden_field :group_id, :value => @user_group.id %>
<%= f.hidden_field :workout_id, :value => @workout.id %>
</td>
<td><%= we.set %></td>
<td><%= f.number_field :repetitions, :value => we.repetitions %></td>
<td><%= if we.exercise.try(:is_cardio) == false then f.text_field :weight end %></td> <!-- :value => value of previous time user did this exercise -->
<td><%= if we.rest.to_i >= 60 then pluralize(we.rest.to_f / 60, 'minute') else pluralize(we.rest.to_i, 'second') end %></td>
<td><%= if we.exercise.try(:is_cardio) == true then pluralize(we.time, 'minute') end %></td>
<!-- <td><%#= if we.exercise.try(:is_cardio) == true then f.number_field :rpe, :value => we.rpe end %></td> Forgot to put this in table -->
<td><%= link_to 'Remove', workout_workout_exercise_path(@workout, we), method: :delete %></td>
<td><%= f.submit %></td>
</tr>
<% end %>
编辑:
更具体地说,我的个人资料页面是我的 UsersController 中的半静态页面,UsersController
非常基本:
class UsersController < ApplicationController
def profile
# @completed_set = CompletedSet.new
end
def settings
end
end
我所有的控制器逻辑都在CompletedSetsController
其中,我试图避免复制到 UsersController