Как элементы в документе eRubis клонируются по всей странице?

У меня есть простой документ eRubis (*.html.erb), и я хочу "копировать" различные элементы по всей странице. Всякий раз, когда я использую простые выражения Ruby, подобные этому:<%= 3.times do %> ... <% end %> с несколькими "временными" инструкциями внутри этого для копирования большего количества элементов возвращает либо ошибки, либо ужасно визуализированные элементы. Каков наилучший способ "скопировать" несколько элементов на странице eRubis с помощью операторов Ruby?

1 ответ

Решение

Один подход, который я использую в RoR, content_for а также yield, Я храню свои элементы в content_for а потом я сори yieldвокруг, где я хочу этот элемент:

<% content_for :some_elements do %>
  <divs or whatever />
  <and maybe some things too />
  <%= even some more erb %>
<% end %>

<%= yield :some_elements %>
<%= yield :some_elements %>
<%= yield :some_elements %>

Те yieldS может пойти куда угодно, вы могли бы даже иметь content_for в вашем файле макета и поместите те yieldв любом виде или частично столько раз, сколько вы хотите.

Если вы хотите просто макетировать список или что-то, times работает отлично, если вы используете его правильно:

<ul>
  <% 10.times do |i| %>
    <li id="item_#{i}">
      content in item <%= i %>
    </li>
  <% end %>
</ul>

Но конечно times подход требует, чтобы все элементы были в одном месте. Это преимущество content_for/yield Кстати, вы можете разместить yieldгде вы хотите. Вы даже можете положить yield внутри times:

<% 10.times do |i| %>
  <%= yield :some_elements %>
<% end %>

Но это просто безумие. В любом случае, получайте удовольствие.

Другие вопросы по тегам