2014-01-30 56 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