2011-08-01 11 views
2

私がコレクションをループすることを可能にするHTMLリストヘルパーを作成したい場合は、リスト項目がある場合は<ul>または<ol>というタグを出力するだけです(実際に気にしているのはちょっと奇妙ですが、一例として働く)。以下のようなRailsでは、どのようにループヘルパーを作成できますか?

何か:

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

(あなたが言うことができるように、私は迷ってしまいました。)

私は私のhtml_list方法で行くと何のまわりで私の頭をラップすることはできません。私を正しい方向に向けるのがいいですか?

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 

または多分このよう:あなたは、おそらくこのような何かしたいと思います

答えて

4

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

@ダン:ありがとう、Strunk&Whiteに向かう途中のもう1歩、ええ?私は怒っている。 –

+2

私たちはすべてミステイクをする;) –

+0

私は 'yield'を考慮しなかった!オハイ。ありがとうございました!! – ClosureCowboy

関連する問題