Как элементы в документе 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 %>
Те yield
S может пойти куда угодно, вы могли бы даже иметь 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 %>
Но это просто безумие. В любом случае, получайте удовольствие.