在一个视图中创建一个form_for,该视图会发布到另一个视图的控制器

时间:2013-05-10 14:21:05

标签: ruby-on-rails crud form-for

我认为这很简单,但无法在任何地方找到解释。

我有一个配置文件页面,其中包含一个表单,提交时应该通过CompletedSetsController,但我无法弄清楚如何通过已编写的{{1}告诉form_for我想要创建/更新而不是在ProfilesController中重写CompletedSetsController的CRUD

我的CompletedSets是脚手架生成的CRUD控制器。

这是我的表格:

现在,只有将CompletedSetsController放在@completed_set = CompletedSet.new中,这个表单才有效,但这不是很干,特别是如果我必须重写ProfilesController中的create和update方法。

ProfileController

编辑:

更具体一点,我的个人资料页面是<%= 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 %> 中的semi-static页面,我的UsersController是非常基本的:

UsersController

我的所有控制器逻辑都在class UsersController < ApplicationController def profile # @completed_set = CompletedSet.new end def settings end end 中,我试图避免将其复制到UsersController中

2 个答案:

答案 0 :(得分:1)

您可以在url中指定form_for选项,该选项将决定表单提交的位置:

<%= form_for @completed_set, url: completed_sets_path do |f| %>

答案 1 :(得分:0)

查看FormHelper上的可用选项,尤其是form_for的选项。如果默认情况不适合你的情况,你可以指定你想要的任何网址。