Rails重复块 - 每次都有不同的值

时间:2014-10-04 02:47:06

标签: ruby-on-rails loops block yield

我有一段需要重复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,我需要为块创建一个部分并重复它,但我并不确定最佳解决方案。所以,如果有人能指出正确的方向,那就太好了。

谢谢!

2 个答案:

答案 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且包含titleimage_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 %>

<强>参考

在下面的页面中查找渲染集合部分:

http://guides.rubyonrails.org/layouts_and_rendering.html