2014-01-30 59 views
2

我有一個對象數組,每個對象都響應'order'方法。Ruby,按照正確的順序迭代對象數組

我可以寫的方法

objects = Objects.all 
objects.each do |i| 
puts i.order 
end 

,但我不知道的順序是正確的。是否有任何快速的方法來迭代我的數組遵循每個對象的正確順序?

更新:真實案例。

class Articles < ActiveRecord::Base 
as_many :article_pages 
end 

a = Article.find(2345) 
pages = a.article_pages 
pages.each ... 
pages.first.order = 1 
pages.last.order = 5 

我需要按照以下順序我的網頁來遍歷...

a.article_pages.order('order').each 

不起作用

+0

正確的順序意味着什麼? –

+0

我的對象通過一個命令保存在數據庫中。 所以如果我打電話object.order我得到1,2,3,4,5等 我需要迭代遵循此順序。 –

+0

這是一個軌道問題? –

回答

4

默認情況下,ActiveRecord的將不能保證任何順序。要改變這種情況,請使用:

a = Article.find(2345) 
pages = a.article_pages.order('order asc') 

要按列排序。切換ascdesc以降序排列。

+0

我編輯了問題,添加了真實案例。 –

+0

更新的解決方案。下一次粘貼你實際嘗試過的代碼,而不是在事後改變它。 –

+1

你確定嗎?「默認情況下,ActiveRecord會按升序排列主鍵。」?如果沒有ORDER BY發送到數據庫,那麼您通常會按PK順序返回它們,但除非您給數據庫一個明確的ORDER BY子句,否則不會保證特定的順序。 –

0

您可以使用排序選項的情況下,你希望它在上升的唯一

a = Article.find(2345) 
pages = a.article_pages.all.sort_by &:order