我遇到了一个问题,ActiveRecord关联中的记录以我意想不到的顺序返回。这很容易解决,但一些已经在生产中的代码假设有一定的顺序,而在我的情况下,这个顺序很重要——事实上这很关键。
我已经缩小了解决这个基本问题的方法:如果"Enumerable#each"保证在关联上返回ActiveRecord记录的一致顺序,那么至少我知道我正在处理一个一贯被打破的假设,这是可以解决的。如果不能保证,那么我可能会被冲洗掉。
因此,我的问题是,在Ruby Enterprise Edition,Release 2011.03中,Enumerable#each
方法是否以与调用Enumerable#to_a
(Object
上定义的函数)相同的顺序返回Enumerable中的元素
我已经从github下载了REE代码,并检查了这个版本的标签(我已经验证了我在开发、阶段和生产环境中使用的是相同的Ruby版本)。问题是我不太擅长阅读C,所以我只能说我很有信心顺序是一样的,但我的C阅读技能不是很好。
是的,它是有保证的;CCD_ 4有效地只是收集CCD_。
enum_to_a创建一个新数组,然后调用collect_all
作为其自身each
的块参数。collect_all
只是执行rb_ary_push(ary, i);
,它将给定的值推送到创建的数组上。在Ruby中,这将是:
array = []
enum.each {|v| array.push v }
希望能有所帮助!