2013-12-12 55 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 %> 

但是,這只是瘋狂。無論如何,玩得開心。