2012-03-19 6 views
0

Sinatra 라이브러리를 사용하여 HTML 코드를 단일 함수로 표시하는 두 가지 함수를 압축하려고합니다. 이 두 기능은 적은 양의 HTML 만 다릅니다. 예를 들어 보겠습니다. 이 차이가 HTML의 일부를 가지고 표시 두 함수의 단일 응축 버전에 전달할 수있는 경우이 두 가지 기능을 호출 루비 함수에서 HTML을 변수에 넣을 수 있습니까?

def make_start_page() 
    <<EOS 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    </head> 
    <body> 
     <p> Hello </p> 
     <img src="..." /> 
    </body> 
    </html> 
    EOS 
end 

def make_guess_page() 
    <<EOS 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    </head> 
    <body> 
     <p> Something different </p> 
     <a href="..." >1</a> 
    </body> 
    </html> 
    EOS 
end 

는 궁금 그 페이지.

def handle() 
    if 1 
     var = "<p> Hello </p> 
     <img src="..." />" 
    elsif 2 
     var = "<p> Something different </p> 
     <a href="..." >1</a>" 
    make_start_guess_page(var) 
end 
+0

그래서 작동하지 않습니까? –

+0

"DRY"개념, 즉 "반복하지 말 것"은 당신이 말하는 것입니다. 차이점을 이해하고 특정 컨텍스트에서 필요한 것을 조건부로 대체하여 코드의 중복성이 거의없는 코드를 리팩토링하는 것이 좋습니다. –

답변

2

당신은 히어 닥에서 변수를 보간 할 수 있습니다 : 예를 들어

def make_start_page(var) 
    <<EOS 
    <!DOCTYPE html> 
    <html lang="en"> 
    <head> 
    </head> 
    <body> 
     #{var} 
    </body> 
    </html> 
    EOS 
end 

합니다.

+0

또는 문자열의'format' 또는'%'도 사용하십시오. –

1

왜 그렇게 할 수 없었는지 이유가 없습니다. 그러나 인쇄하려면 레일에 String#html_safe 또는 haml에 !=과 같은 기능을 사용해야합니다.

+0

+1 HTML 안전. –

관련 문제