2011-08-01 2 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>', 
     enum.map { |e| yield e }.join('</li><li>'), 
     '</li>', 
     '</' + tag.to_s + '>' 
    ] 
    html.join.html_safe 
end 

최종 문자열을 구축하기위한 다양한 방법이있다, 그것의 고기는 점이다

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

당신은 아마 이런 걸 원하는 것 블록을 취하여 열거 형을 반복하는 메소드를 작성하여 그 블록을 길을 따라 각 요소에 적용합니다.

+1

@ Dan : 감사합니다. Strunk & White로가는 길에 한 발 더 나아 갔습니까? 나는 진심으로 거짓말 쟁이다. –

+2

우리 모두는 실수를한다;) –

+0

나는 'yield'도 고려하지 않았다! 오오. 고맙습니다!! – ClosureCowboy

관련 문제