2011-08-01 36 views
2

比方說,我想創建一個HTML列表幫助程序,它允許我循環訪問一個集合,並且只有輸出<ul><ol>標記(如果有任何列表項)(實際上我記得有點難看,但是這個將以一個例子爲例)。在Rails中,我該如何創建循環幫助器?

喜歡的東西:

<% html_list(:ul, MyModel.all) do |my_model| %> 
    <span><%= my_model.id %></span> 
<% end %> 

(正如你所知道的,我迷路了。)

我不能換我的頭周圍的會是什麼我html_list方法去。你會介意指引我朝着正確的方向嗎?

回答

4

你可能想是這樣的:

def html_list(tag, enum) 
    html = '<' + tag.to_s + '><li>' 
    html << enum.map { |e| yield e }.join('</li><li>') 
    html << '</li></' + tag.to_s + '>' 
    html.html_safe 
end 

或者可能是這樣的:

def html_list(tag, enum) 
    html = [ 
     '<' + tag.to_s + '>', 
     '<li>', 
     enum.map { |e| yield e }.join('</li><li>'), 
     '</li>', 
     '</' + tag.to_s + '>' 
    ] 
    html.join.html_safe 
end 

有多種方法來建立最終的字符串,它的肉是你」重新構建一個方法,該方法需要一個塊並遍歷一個枚舉並將該塊應用於每個元素。

+1

@Dan:謝謝,再去Strunk&White的路上,呃?我依賴k spe,依靠。 –

+2

我們都做錯了;) –

+0

我甚至沒有考慮「收益」!天上。謝謝!! – ClosureCowboy