2011-09-01 6 views
0

私は自分のウェブサイトのための大きなフラットなHTMLメニューを生成するRubyスクリプトを書いています。ページが読み込まれるたびにこのメニューを生成することができますが、これはリソースの浪費です決して変更する必要はありません。Ruby:動的値でHTMLを生成するには?

私は効果的に(半sudocodeに)次の手順を実行します:その後、

part_of_my_menu = eval %{ 

<script type="text/javascript"> 
    var mapper = new Array(); 
    <% parent_categories.each_with_index do |parent_category,i| -%> 
    mapper["#{parent_category.name}"] = <%= i -%>; 
    <% end -%> 
</script> 

} 

とHTMLファイル(私が行うことができますこの)にpart_of_my_menu文字列変数を書くことができます。

これはevalがRubyでどのように動作するのかわかりませんが、誰もこの同じ「ラッパー」機能を実現する方法を知っていますか?

-

感謝を(FYI私は私の「evalの」機能をラップするコードは、これよりもはるかに長いですが、私は私が達成しようとしているものを説明するために、非常に小さなスニペットを掲載しました)!

tmpl = %q{<script type="text/javascript">...</script>} 
erb = ERB.new(tmpl) 
parent_categories = [ ... ] 
part_of_my_menu = erb.result 

ERBドキュメントは、それを使用する方法のいくつかの良い例が含まれています:あなたはこのようなものを行うことができるように

答えて

2

ERBは、標準ライブラリの一部です。

あなたは手作業を必要としませんeval構造、既存の標準ライブラリと既存の知識を使用することができます。

0

私が開発したdom gemに興味があるかもしれません。次のようなHTML文字列を生成することができます:

require "dom" 
["foo".dom(:span, class: "bold"), "bar"].dom(:div).dom(:body).dom(:html) 
# => "<html><body><div><span class=\"bold\">foo</span>bar</div></body></html>" 
関連する問題