我想了解如何实现以下目标。我有一个简单的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语句中吗?
有任何帮助表示赞赏吗?
答案 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| %>