2012-03-19 19 views
0

Sinatraライブラリを使用して、HTMLコードを表示する2つの関数を1つの関数に集約しようとしています。これらの機能はどちらも少量のHTMLだけが異なります。 例を示します。この2つの関数を呼び出しますRubyの機能で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 

違いHTMLの小さな部分を取ると表示されますこれらの2つの関数のシングル、要約版にそれを渡すことが可能であるならば、私は思っていましたページ。

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の安全のため。 –

関連する問題