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