2014-12-19 131 views
3

我不知道如何有條件地包括「結束」的標籤ERB條件包括<% end %>標籤

我有這樣一個

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

你想做什麼? – Surya 2014-12-19 09:53:44

+1

我強烈地考慮走不同的路線;這會使關於頁面/表格/部分的推理更加困難。 – 2014-12-19 10:03:16

+0

@Surya好吧,所以我有一些對應於相同模型的選項卡,但允許編輯不同的屬性。之前,我對每個不同的標籤都有一個表單,但後來我意識到這是愚蠢的,因爲只有對應於該標籤的參數纔會被保存。 (基本上,每個選項卡都有一個部分,並且每個選項都調用其他部分...) – 2014-12-19 10:20:01

回答

3

你應該傳遞給form_special只是paramters的結構形式:

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

爲了您exaplained特定的情況下,只需避免的情況下呈現_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 %> 
+0

對不起鍵盤問題讓我張貼之前,我是結束... 所以你說我應該實際上是在我所有其他文件中重寫代碼,以便調用'<%= form_for(something)do | f | %>'在重新渲染包含字段的部分之前? – 2014-12-19 12:03:43

+0

這似乎是最乾淨的方法。 – 2014-12-19 12:05:07

+0

否則,有些朋友建議我可以做一個'render_partial',與部分僅包含一個''<%= end %> ...標籤 – 2014-12-19 12:08:21