2012-06-28 5 views
0

루프와 HAML에서 공백을 제거하지만, 여분의 주름과 :이 질문이 하나와 유사한

Auto-removing all newlines from Haml output

는이 같은 코드와 링크의 쉼표로 구분 된 목록을 구성하고 가정 :

- foos.each_with_index do |foo, i| 
    = ', ' if i > 0 
    = link_to foo.name, foo 

쉼표 앞에 공백을 넣지 않고 어떻게합니까? 기존의 악어 운영자 또는 surround/precede/succeed과 함께이 작업을 수행 할 방법이 없습니다.

이러한 연산자를 사용할 수 있도록 루프를 다시 작성할 수있는 방법이 있습니까? LINK_TO 문자열을 반환하는 도우미 단지이기 때문에

답변

1

, 당신은 하나의 문에서 작업을 수행 할 수 있습니다

- foos.each_with_index do |foo, i| 
    = link_to(foo.name, foo) + (i < foos.length ? ', ' : '') 

그러나, 당신은 아마 도우미에이 코드를 추출하고 테스트를 작성하고자합니다.

+0

저에게 맞습니다. 나는 'length'보다는 0에 대해 테스트하는 것을 좋아하지만, 단지 concat을 뒤집을 수 있습니다. –

+0

몇 가지 수정 사항 : (1) 공백이있는 b/c를 모두 사용한 후에'+'주위를 뒤집는 것이 작동하지 않습니다. (2) 길이가 아니라 길이가 1이어야합니다. (3) '원시'를 통해 실행해야합니다. –

1

HAML 여기에 사용할 수있는 succeed 방법과 함께 제공 :

- foos.each do |foo| 
    = succeed (foo == foos.last) ? '' : ', ' do 
    = link_to foo.name, foo 

문자열 보간 표현식을 사용하여 조건부 빈 문자열 또는 공백/w 쉼표를 표시 할 수 있습니다.

+0

빈 문자열에'succeed'의 인수를 설정하는 아이디어가 마음에 들어요. 나는 당신이 약간의 여분의 문자열 작업을하고 있다고 생각하지만 이것을 쓸 수있다 :'= success (foo == foos.last? '': ',') do'. 권리? –

+0

예, 가능합니다. 처음 시도 할 때 오류가 발생했지만 다른 구문 오류가있었습니다. 방금 내 레일 서버를 가동하고 테스트했습니다. 밖 보간으로 잘 작동합니다. @PaulAJungwirth – Roi