我有一段需要重复20次的代码,例如:
<div class="block">
<%= link_to root_path do %>
<h2>Title</h2>
<%= image_tag 'image.jpg' %>
<% end %>
</div>
,只有<h2>Title</h2>
和<%= image_tag 'image.jpg' %>
会发生变化。
我正在考虑使用所有值的数组并将它们传递给yield,我需要为块创建一个部分并重复它,但我并不确定最佳解决方案。所以,如果有人能指出正确的方向,那就太好了。
谢谢!
答案 0 :(得分:1)
您可以通过在控制器中创建标准Ruby对象来传递数据 - 即
@images = [
{
:title => 'Image One',
:file => 'image1.jpg'
},
{
:title => 'Image Two',
:file => 'image2.jpg'
}
...
]
然后在主视图中:
<div class="block">
<%= link_to root_path do %>
<%= render "shared/images", :images => @images %>
<% end %>
</div>
最后在你的部分shared/_images.html.erb
:
<% @images.each do |image| %>
<h2><%= image.title %></h2>
<%= image_tag image.file %>
<% end %>
答案 1 :(得分:1)
您可以使用ROR partials的集合渲染功能。
假设您有一个名为Image
且包含title
和image_url
字段的AR模型,
并且@images
包含Image
个对象的数组:
<div class="block">
<%= link_to root_path do %>
<%= render partial: "meta_info", collection: @images %>
<% end %>
</div>
_meta_info.html.erb
<h2><%= meta_info.title %></h2>
<%= image_tag meta_info.image_url %>
<强>参考强>
在下面的页面中查找渲染集合部分: