2013-12-12 46 views
0

我有一个简单的eRubis(* .html.erb)文档,并希望在整个页面中“复制”各种元素。每当我使用如下简单的Ruby语句: <%= 3.times do %> ... <% end %>在复制更多元素时会有多个“times”语句返回错误或可怕的呈现元素。使用Ruby语句在eRubis页面中“复制”多个元素的最佳方法是什么?eRubis文档中的元素如何克隆整个页面?

+0

您以前使用过偏分数吗?这似乎正好描述了他们用来解决问题的方法 – Slicedpan

+0

当然。唯一的问题是你仍然需要一个Ruby语句多次渲染该部分。 – T145

回答

1

我在RoR中使用的一种方法是content_foryield。我在我的元素(一个或多个)存储在content_for,然后我垃圾yield s左右的地方我想要的元素:

<% 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 s在任何视图或部分次数任意你想要的。

如果你想简单地嘲笑了一个列表或东西,times工作得很好,如果你正确地使用它:

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

但当然times方法要求所有元素是在同一地点。这是content_for/yield方式的优点,您可以将yield放在任何你想要的地方。你甚至可以把一个yieldtimes

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

但是,这只是疯狂。无论如何,玩得开心。