2016-09-21 77 views
0

在我的用戶個人資料上,我想添加該用戶上傳的最新照片中的4張。最初,我有<%- @user.photos.last(4).each do |photo| %>。此代碼有效,但它不適用於我的佈局。所以我需要一行顯示最後2張照片,而第二行顯示最後3-4張照片。如何使用`@ photo.last()`顯示最後第三張和第四張照片

這是我想出的和行<%- @user.photos.last(3,4).each do |photo| %>不起作用。我也試着(3-4)

<div class="photo-box"> 
    <%- @user.photos.last(2).each do |photo| %> 
    <a href="<%= user_photo_path(@user.username, photo.id) %>" class="photo-thumbnail"> 
     <div class="photo-mini"> 
     <%= image_tag photo.url %> 
     </div> 
    </a> 
    <% end %> 
</div> 

<div class="photo-box"> 
    <%- @user.photos.last(3,4).each do |photo| %> 
    <a href="<%= user_photo_path(@user.username, photo.id) %>" class="photo-thumbnail"> 
     <div class="photo-mini"> 
     <%= image_tag photo.url %> 
     </div> 
    </a> 
    <% end %> 
</div> 

回答

2

您可以使用[]方法photos陣列上。

-1得到最後一個元素,-2得到倒數第二個,依此類推。

@user.photos[-2..-1].each #=> return the last two pictures 

當然,在這種情況下,您可以簡單地使用@user.photos.last(2).each

@user.photos[-4..-3].each #=> return the last 3-4 pictures. 

這將拋出一個錯誤,除非@user.photos具有至少4的長度,否則,你將試圖訪問一個不存在的值。因此,要檢查這一點,您可以將div包裝在if聲明中。

<% if @user.photos.length >= 2 %> 
    <div class="photo-box"> 
    <% @user.photos.last(2).each do |photo| %> 
     ... 
    <% end %> 
    </div> 
<% end %> 

<% if @user.photos.length >= 4 %> 
    <div class="photo-box"> 
    <% @user.photos[-4..-3].each do |photo| %> 
     ... 
    <% end %> 
    </div> 
<% end %> 
+0

我得到一個錯誤沒有4張照片的用戶。我怎麼能寫一個if語句來說'如果用戶有4張照片'。我是新來的紅寶石和學習 – GVS

+0

請詳細說明你想在用戶有1,2,3張照片的情況下顯示什麼? – davidhu2000

+0

如果用戶只有1或3張照片,怎麼辦? – davidhu2000

1

我會得到數組中的最後四個,然後使用#in_groups_of將它們分成兩組。

然後,您可以遍歷兩個照片的兩個陣列,每個創建div。這種方法很容易擴展到n組m照片。

喜歡的東西:

<%- @user.photos.last(4).in_groups_of(2, false).each do |photo_group| %> 
    <div class="photo-box"> 
    <%- photo_group.each do |photo| %> 
     <a href="<%= user_photo_path(@user.username, photo.id) %>" class="photo-thumbnail"> 
     <div class="photo-mini"> 
      <%= image_tag photo.url %> 
     </div> 
     </a> 
    <% end %> 
    </div> 
+0

接受的答案很好,但我更喜歡這個答案,它更加簡潔,並且更容易適應新的佈局。 – philomory

相關問題