Rails 条件 form_form 控制器和动作参数

Rails conditional form_form controller and action parameters

也许我在这里违背了惯例,但我有一个由多个控制器使用的表单,我想自定义提交操作的发送位置。

我试过:

<% if local_assigns.has_key? :form_type %>
  <% form_type = local_assigns[:form_type] %>
<% end %>
<% if local_assigns.has_key? :form_action %>
  <% form_action = local_assigns[:form_action] %>
<% end %>

<%= form_for :my_form, url: { controller: form_type, action: form_action } do |f| %>
# OR #
<%= form_for :my_form, url: { controller: "#{form_type}", action: "#{form_action}" } do |f| %>

以及类似的内容:

<% if form_type == 'type_A' %>
  <%= form_for :my_form, url: { controller: 'controller_A', action: 'action_A' } do |f| %>
<% elsif form_type == 'type_B' %>
  <%= form_for :my_form, url: { controller: 'controller_B', action: 'action_B' } do |f| %>
<% elsif form_type == 'type_C' %>
  <%= form_for :my_form, url: { controller: 'controller_C', action: 'action_C' } do |f| %>
<% end %>

两个都不起作用,第二个原因显而易见。任何解决方法?我应该改用 form_tag 吗?并非我所有的形式都与对象相关联。我还试图避免将此模板嵌套在另一个模板中(外部模板包含正确的 form_for 参数)。作为最后的手段,我想我可以使用原始 html 表格。

奖金......还没有到那里,但我可能还需要修改 form_for 键,在这种情况下 'my_form' (上文)。

为常用表格示例制作一个常用部分

_common_partial.html.erb

<%= form_for object, url: url do |f|%>
  #.. form fields
<%end%>

有条件地渲染这个部分

<% if form_type == 'type_A' %>
  <%= render 'path/common_partial', object: form_for_object, url: path_to_which_form_be_submitted%>
<% elsif form_type == 'type_B' %>
  <%= render 'path/common_partial', object: form_for_object, url: path_to_which_form_be_submitted%>
<% elsif form_type == 'type_C' %>
  <%= render 'path/common_partial', object: form_for_object, url: path_to_which_form_be_submitted%>
<% end %>