2011-05-22 19 views
6

我想用一些嵌套元素創建標籤標籤。我使用標籤助手並試圖傳遞內部html作爲塊,但生成的HTML看起來不像我預期的那樣。 ERB:將塊傳遞給rails3中的標籤助手

<span>Span element</span> 
<%= label("object", "method") do %> 
    <span>Inner span</span> 
<% end %> 

HTML輸出:

<span>Span element</span> 
<span>Inner span</span> 

<label for="object_method"> 
<span>Span element</span> 
    <span>Inner span</span> 
</label> 

當我通過使用<%%>標記輸出是理所應當的內部HTML:
ERB:

<span>Span element</span> 
<%= label("object", "method") do %> 
    <% raw '<span>Inner span</span>' %> 
<% end %> 

HTML輸出:

<span>Span element</span> 
<label for="object_method"> 
    <span>Inner span</span> 
</label> 

我想知道如果這是我的錯誤或錯誤在ActionView標籤助手。對於其他幫手阻止傳遞工作正常。

感謝, 米哈爾

回答

9

我的理解是,你需要使用label_tag助手在這種情況下:

<%= label_tag "my_label_name" do %> 
    <span>Inner span</span> 
<% end %> 

這樣做的原因是,雖然形式標籤幫助填寫了」 「屬性(使用你的模型對象屬性),你不需要嵌套元素。

當你有一個打開標籤的標籤(而不是自閉),它包裝了內部內容,因此不需要「for」屬性,因爲標籤顯然與它的嵌套內容相關聯(這被稱爲隱式協會)。

所以,這是預期的行爲 - 看起來Rails團隊故意以這種方式構建它。

4

Scott Lowe的回答是正確的,但我會更進一步......您甚至不需要使用Rails label_tag。只需使用原始的HTML像這樣:

<label> 
    <span>Inner span</span> 
</label> 

如果將標籤與表單元素相關聯(如單選按鈕):

<label> 
    <%= f.radio_button :approval_state, 'R' %> 
    Rejected 
</label> 
1

在Rails 3.2.11,這是爲我工作:

<span>Span element</span> 
<%= label :item, :method do %> 
    <span>Inner span</span> 
<% end %> 

結果:

<span>Span element</span> 
<label for="item_method"> 
    <span>Inner span</span> 
</label>