2011-08-16 6 views
0

나는 루비 문서를보고 있었지만 그것들을 이해할 수는 없었다. 테이블을 생성하고 각 셀에 파일을 저장하는 응용 프로그램이 있는데 사용자는 "파일 추가"라는 마지막 상자를 클릭하여 다른 파일을 추가 할 수 있지만이 작업은 루비에서 수행하는 방법을 알 수 없습니다.Ruby에서 for-loop를 정의하는 방법은 무엇입니까?

PHP에서 나는 이렇게 할 것입니다; 이 사람이 생각 얻을 수 있습니다 경우 : 루비에서

for($i = 0; $i <= $file_array.size; $i++){ 
    if($i%3=0){ 
    html .= "</tr><tr>" 
    } 
    if($i == $array.size){ 
    //Prevents out of bounds error 
    html .= "<td><a href=\"...\">New File Link</a></td>" 
    } 
else{ 
    //We are not out-of-bounds; continue. 
    html .= "<td><a href=\"$file_array[$i]\">File Link</a></td>" 
} 
} 

를 나는 내가 사용하고 싶은 경우 나도 몰라,

object.files.each_with_index |attachment, i| 

을 가지고 있지만, 나는 그것을 사용하는 방법을 알아낼 수 없습니다.

업데이트 : 코드에 표 셀을 넣는 것을 잊어 버렸습니다.

+0

jtbandes는 정확하지만, Ruby에서 컬렉션을 반복하거나 반복하는 다양한 방법에 대한 좋은 기사가 있습니다. http://www.skorks.com/2009/09/a-wealth-of-ruby-loops- and-iterators/ –

답변

3

루비의 eacheach_with_index은 PHP의 foreach 루프와 비슷합니다. 변수 attachment 배열의 요소가 될 것입니다 :

html = "" 
object.files.each_with_index do |attachment, i| 
    html << "</tr><tr>" if i % 3 == 0 
    html << "<a href=\"#{attachment}\">File Link</a>" 
end 
html << "<a href=\"...\">New File Link</a>" 

그리고 당신의 문자열을 sanitize하는 것을 잊지 마세요!

# make all file links into a new array converted to html code, append 
# a "new file" link 
files = object.files.map {|link| '<a href="%s">File Link</a>' % link } 
files << ('<a href="%s">New File Link</a>' % "...") 

# now break this into slices of 3 wrapped with <td> 
files = files.each_slice(3).map {|tr| tr.map {|td| "<td>#{td}</td>" }.join } 

# now wrap the rows with <tr> 
files = files.map {|tr| "<tr>#{tr}</tr>" }.join 

이 수

+0

죄송합니다, 방금 PHP 코드를 업데이트했지만 이전에 문제였던 것은 New File 링크가 % 3을 사용하여 개행하지 않을 것입니다. PHP 코드는 하나의 루프를 추가하여 포함 시키지만 Array에는 액세스하지 않습니다. 따라서이 코드를 사용하면 3이 될 때만 새로운 첨부 파일이 4 번째 열로 표시됩니다. –

+0

cell_count 코드로 –

0
html = "" 
object.files.each_slice(3) do |files| 
    html << "<tr>" 
    files.each do |attachment| 
    html << "<a href=\"#{attachment}\">File Link</a>" 
    end 
    html << "</tr>" 
end 
html << "<a href=\"...\">New File Link</a>" 
2
당신은 그것에게 PHP 방법을 만들려고 루비의 기능적 접근 방식을 더 활용하려고해서는 안

는 ... 여기에 내가 시도하려는 접근 방법이다 복잡해 보이지만 맵핑 함수와 블록 매개 변수의 가능성과 힘을 보여주고 코드가 덜한 헬퍼 변수를 사용하여보다 명확하고 IMHO가 더 읽기 쉽고 이해할 수 있음을 보여줍니다. 그리고 가장 좋은 점은 for 루프를 처음 보았을 때 거의 아무도 이해하지 못하는 새로운 파일 링크를 처리하는 데 필요한 흑 마법을 제거한다는 것입니다.

BTW : 귀하의 질문에 공통적으로 Ruby를 요청했지만 레일스를 사용하고 있다고 생각합니다. map 블록과 결합 된 도우미 content_taglink_to을 살펴 보는 것이 좋습니다. 코드를 더 읽기 쉽게 만들고 HTML을 이스케이프 처리합니다.

+0

을 수정했습니다. link_to 도우미를 사용하면 표시되지 않고 예가 레일스를 사용하고 있습니다. –

관련 문제