【发布时间】:2014-12-19 09:51:04
【问题描述】:
我想知道如何有条件地包含一个“结束”标签
我有很多像这样的“表单部分”
_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 %>
【问题讨论】:
-
你想做什么?
-
我强烈考虑走不同的路线;这将使关于页面/表单/部分的推理更加困难。
-
@Surya 好的,所以我有一些对应于同一模型的选项卡,但允许编辑不同的属性。以前,我为每个不同的选项卡设置一个表单,但后来我意识到这很愚蠢,因为只会保存与选项卡对应的参数。 (基本上,每个选项卡都有一个部分,每个选项卡都在调用其他部分......)
-
... 而这些“其他部分”,也被完全不同的视图调用,有些视图期望部分定义“form_for”,其他视图已经定义了form_for,并通过生成的 f 变量到“其他部分”
标签: ruby-on-rails ruby erb