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

时间:2018-08-17 09:03:33

标签: ruby-on-rails templates conditional-statements form-for ruby-on-rails-5.2

也许我在这里违反约定,但是我有一个供多个控制器使用的表单,我想自定义提交动作的发送位置。

我尝试过:

<% 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”(上图)。

1 个答案:

答案 0 :(得分:1)

为通用表格示例提供通用部分

_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 %>