也许我在这里违反约定,但是我有一个供多个控制器使用的表单,我想自定义提交动作的发送位置。
我尝试过:
<% 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”(上图)。
答案 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 %>