我想知道如何有条件地包含"结束"标签
我有很多像这样的"表单部分">
_form_part_x.html.erb (但这不能适应我想做的事情(
<%= form_for(@model) do |f| %>
<%= f.some_tag(...) %>
<% end %>
在很多视图中,我只需要渲染其中一个人。
现在,问题是我想为我的模型提供另一个大视图,在那里我渲染所有这些部分(form_part_1、form_part_2等(。就我而言,我使用的是引导选项卡,每个选项卡都是一个部分,反过来,它将调用多个部分form_part_x
生成特定字段。
但是我不想在我的 HTML 中有多个表单标签,只有一个大表单,所以所有内容都同时保存。因此,在我render tabX
之前,我编写代码来生成HTML标签,并在呈现所有选项卡后将其关闭。
simple_view.html.erb
<%= render 'form_part_x' %>
big_view.html.erb
<%= form_for(something) do |f| %>
<%= render 'tab1', f:f %>
<%= render 'tab2', f:f %>
...
<%= render 'tab5', f:f %>
<% end %>
_tab1.html.erb
<%= render 'form_part_10', f:f %>
<%= render 'form_part_23', f:f %>
_form_part_x.html.erb(如果我知道如何在 <%> 块中添加 <% 结尾 %>
所以基本上,我认为我可以调整我的部分以有条件地包含<%= form_for(@model) do |f| %>
:
<%
# These lines help determine whether an HTML `form` tag should be generated or not
f ||= false
if not f then
existing_form = false
else
existing_form = true
%>
<% if not existing_form %>
# If the partial is called without sending a local f, we want to create the HTML `form` tag
<%= form_for(something) do |f| %>
<% end %>
<%= f.text_field(:some_field) %>
<p>Many more stuff</p>
<% if not existing_form %>
# If the partial is called without sending a local f, we want to CLOSE the newly created HTML `form` tag
<!-- I need to add an <% end %> here !
<% end %>
您应该传递给表单构造的 form_special 参数:
_form_special.html.erb:
<%= form_for(something) do |f| %>
<p>Many form-related stuff</p>
<%- if case condition depending on the passed arguments as `params` %>
<p>If case stuff: for example an additional `render_partial` </p>
<%- end %>
<% end %>
其他观点:
<%= render partial: 'form_special', params: parameters %>
对于您解释的特定情况,只需避免在表单外部呈现 _form_part_x.html.erb 的情况,因此它将是:
<%= f.text_field(:some_field) %>
<p>Many more stuff</p>
和呼叫者视图:
<%= form_for(something) do |f| %>
<%= render partial: form_part_x, f:f %>
<% end %>