2014-01-13 4 views
0

Я хочу получить представление о том, как достичь следующего. У меня есть простой 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 

Как я могу захватить только одно изображение, если есть кратные? Это было бы? хотя не уверены в синтаксисе и как он будет вписываться в мой код ... Или я создам отдельный блок и поместил бы его в оператор if, если количество изображений больше 1?

Любая помощь оценивается?

+0

Не совсем уверен, что вы пытаетесь сделать. Вы хотите, чтобы пользователь видел только что загруженные изображения, а не все изображения, которыми он владеет? Или вы хотите, чтобы пользователь мог видеть первое изображение (возможно) нескольких изображений, которые он загрузил? –

+0

см. Первое изображение потенциально многих (не всегда много изображений) – Richlewis

+0

Попробуйте сыграть с этой строкой '<% p.images.each do | i | %> '. Я предполагаю, что это массив, использование '.last' или' .first' будет моей первой ставкой, зависит от того, как вы храните фотографии при загрузке. –

ответ

2

Вы можете использовать first так:

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

Если вы делаете это не нужно:

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

, спасибо за предложение ответа .. это работает, как и Uri Agassi. Теперь я вижу, что мне не нужно перебирать изображения в отдельном блоке, просто присоединяйтесь к ним, как вы (p.images.first.photo). Я помечаю ваш ответ как вы, где первый отправил что-то, плюс вы также помогли реорганизовать мой код :-) – Richlewis

+0

Добро пожаловать. Обратите внимание: если возможно иметь портфели без каких-либо изображений, вы должны проверить, что 'p.images.first' не возвращает' nil'. – Mischa

1

Если я правильно понимаю, вы хотите изменить поведение p.images.each принять только первый элемент, в этом случае минимальное изменение воздействия на ваш код может быть:

<% p.images.take(1).each do |i| %> 
Смежные вопросы