我有一个这样的集合:
UserLevels
id
blah_id
blah2_id
..
..
现在我想进一步使用
的所有行提交此集合blah2_id = 3
我不需要再次访问数据库,因为我已经有了这个集合,而且这个集合最多可能有5-10行。
最好的方法是什么?或者我有什么选择。
答案 0 :(得分:2)
首先想到的是Array#select
(仅限Ruby 1.9):
@collection = UserLevel.all
@filtered_collection = @collection.select { |l| l.blah2_id == 3 }
Ruby的Array
类非常强大,值得研究:http://www.ruby-doc.org/core/classes/Array.html
在Ruby 1.8中,等效方法是Enumerable#find_all
:
@filtered_collection = @collection.find_all { |l| l.blah2_id == 3 }
答案 1 :(得分:1)
恕我直言,如果你调整你的数据库查询来获取所需的对象会更好。在大型阵列上使用Array#select非常慢。
原因 - 您将整个数组对象加载到内存中。然后,Array #select将在每个元素上运行块。极其内存密集型操作。您可能没有在开发计算机上意识到这一点,但是当您在具有> 5k记录的阵列上运行此类操作时,您会感受到热量。