Ruby: Как использовать генерацию HTML с динамическими значениями? - PullRequest
0 голосов
/ 02 сентября 2011

Я пишу скрипт на Ruby, который будет генерировать большое плоское HTML-меню для моего веб-сайта. Я мог бы генерировать это меню на лету при каждой загрузке страницы, но я думаю, что это пустая трата ресурсов, тем более что почти никогда не нужно менять.

Я хочу эффективно сделать следующее (в полусудокоде):

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>

}

и затем иметь возможность записать строковую переменную part_of_my_menu в файл HTML (это я могу сделать).

Я знаю, что это не то, как eval работает в Ruby, но кто-нибудь знает, как добиться такой же функциональности "оболочки"?

(fyi - код, который я хочу обернуть с помощью моей функции «eval», намного длиннее, чем этот, я только опубликовал очень маленький фрагмент, чтобы проиллюстрировать, чего я пытаюсь достичь)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

ERB является частью стандартной библиотеки, поэтому вы можете делать такие вещи:

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

Документация ERB содержит несколько хороших примеров его использования.

Вам не нужна ручная eval конструкция, вы можете использовать стандартные существующие библиотеки и свои существующие знания.

0 голосов
/ 05 мая 2016

Вас может заинтересовать 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>"
...