如果有倍数,则仅使用第一张图像

时间:2014-01-13 14:21:25

标签: ruby arrays ruby-on-rails-3 paperclip

我想了解如何实现以下目标。我有一个简单的cms,可以让你上传投资组合信息/图像。用户可以上传一个图像或多个图像。

要显示每个图像,我使用.each并遍历每个投资组合的所有图像......

<!-- Project Feed -->
    <div class="project-feed clearfix">
     <% @portfolios.each do |p| %>
      <div class="one-third project-item"><!-- add data filter class here to enable selection of sectors-->

       <% p.images.each do |i| %>
        <%= image_tag(i.photo.url(:portfolio_square)) %>
         <div class="overlay">
         <!-- Small image bottom right of overlay, click and can navigate through all images 
          <%= image_tag(i.photo.url(:portfolio_large), :class => 'lightbox-link folio', :rel => 'gallery') %> -->
          <%= link_to p do %>
           <h5><%= p.title %> </h5>
          <% end %>
           <p>
          <%= p.sectors.map(&:name).join(", ") %>
          </p>
         </div><!--/overlay-->
         <h4><%= p.title %></h4>
      </div>
       <% end %>
     <% end %>

我的问题是,如果有多个图像分配给投资组合(假设投资组合3有4个图像与之关联),那么它们都会显示..

所以我想实现这种布局

Portfolio 1   Portfolio 2  Portfolio 3  

而不是

 Portfolio 1   Portfolio 2  Portfolio 3

 Portfolio 3   Portfolio 3  Portfolio 3

如果有多个图像,我怎么才能抓取一个图像?这会是.first?虽然不确定语法以及它如何适合我的代码...或者如果图像计数大于1,我会创建一个单独的块并将其放在if语句中吗?

有任何帮助表示赞赏吗?

2 个答案:

答案 0 :(得分:2)

您可以像这样使用first

<%= image_tag(p.images.first.photo.url(:portfolio_square)) %>

如果你这样做,你不需要:

<% p.images.each do |i| %>

答案 1 :(得分:1)

如果我理解正确,您希望将p.images.each的行为更改为仅采用第一个元素,在这种情况下,代码的最小影响更改可能是:

<% p.images.take(1).each do |i| %>