2012-11-26 80 views
0

我正在使用Rails編寫此代碼,但我懷疑邏輯不是Rails特有的 - 我有一個條目列表,它們都是照片和視頻兩種類型中的一種。按類型從循環中訂購條目

目前我有一個循環以反向日期順序遍歷列表,輸出兩種類型的混合。以下是迴路我有一個例子,它不是實際的代碼,但邏輯是一樣的:

post_count = 1 
if post_count < 2 
    if post.type == 'photo' 
     <div>post.title</div> 
     post_count = post_count + 1 
    end 
else 
    if post.type == 'photo' 
     <div>post.title</div> 
     post_count = post_count + 1 
    elsif post.type == 'video' 
     <div>post.embed_code</div> 
     post_count = post_count + 1 
    end 
end 

這是接近我想要什麼,因爲我想這兩種類型將被混合到一定程度,但我想知道是否有可能讓循環拉出前兩個照片條目並先渲染它們,然後正常輸出列表的其餘部分,包括列表中前面出現的任何視頻條目。

這聽起來有點令人費解給我,所以這裏有一個圖,在右側期望的結果:提前

List

感謝。

回答

1

嗯不知道這是否是你在找什麼,但看看:

@posts.select{ |post| post.type == 'photo' }.first(2).each do |photo_post| 
    @posts.delete_if{ |post| post == photo_post } 

    # display photo_post 
    # <div>post.title</div> 

@posts.each do |post| 
    post.try(:title) || post.try(:embed_code) 

此代碼假設@posts是有序的爲你祝福圖片/視頻的列表(按日期一般) 。它不應該支持nil個案。

+0

太棒了!這正是我所需要的,我所做的就是使用前兩行來提取前兩個照片條目,將它們存儲在一個新數組中,並將它們從原始數組中刪除。然後,我將新數組和原始數組組合在一起,這給了我所尋找的順序。非常感謝! – sowasred2012

+0

不客氣! – MrYoshiji