2013-07-16 63 views
3

我一直在試圖改變我的循環來減少而不是增加。我已經嘗試過的任何東西都在工作,請有人幫助我。在Ruby on Rails中減少循環

<% @orders.each do |order| %> 
    #code 
<% end %> 

由於

+2

問題是你不明白'each'的作用。它遍歷你的'@ orders'數組的內容,從第一個元素到最後一個元素。爲了向後走這個列表,你必須以某種方式反轉列表。 Array文檔很好地涵蓋了這一點。 –

回答

13

Array#reverse_each

同陣列#每個,但穿過以相反的順序自。

嘗試以下:

<% @orders.reverse_each do |order| %> 
    #code 
<% end %> 
+1

完美。謝謝 – baihu

+1

這比'@ orders.reverse.each'還要好,以防有人考慮到這一點。至少在MRI上,'reverse_each'被實現爲從數組末尾開始計數的循環,而'reverse.each'創建了一個新數組,然後遍歷它(因此,'reverse_each'大致爲O( n),而'reverse.each'大致是O(2n)(免責聲明:我實際上不知道大O符號,所以這可能是完全錯誤的))。 – henrikhodne

3

你可能要考慮

@orders = Order.where(whatever: 'something').order('created_at DESC') 

上面,我們通過created_at字段排序的@orders。你可以使用你喜歡的任何領域進行排序。然後你可以正常迭代

<% @orders.each do |order| %> 
    yay! 
<% end %> 
+3

爲什麼這會被降低? LEL – naomik