0

我经常遇到这种情况。

post_comments = post.comments
#grabs maybe 3 records out of thousands in the table
do_something_with post_comments

#...later in the same request...

subset_of_comments = post_comments.where(:awesome=>true)
#hits the database again :-(
do_something_else subset_of_comments

我意识到数据库非常擅长查找记录,但我不知道返回完整表并查看数千条记录比搜索已为 1 缓存的此帖子所附的一小部分记录更好或者两个我需要。

如果我想提高这个过程的效率,我该怎么做?

4

2 回答 2

1

是的。首次加载 AR:Relation 后,所有记录都已缓存。但是,如果您传递另一个请求.where()或其他请求,它会再次拉取查询。如果你想在缓存的记录中搜索,不要发送.where,只用数组方法操作。

# second 'request':
subset_of_comments = post_comments.map {|comment| comment if comment.awesome == true}.compact

数组方法: .find- 对于第一个匹配的记录。.map.collect- 用于收集

您的评论对象必须有“很棒”的公共读者。

于 2012-12-13T16:27:34.207 回答
0

您可以使用选择方法:

subset_of_comments = post_comments.where(:awesome=>true)
# becomes
subset_of_comments = post_comments.select{ |pc| pc.awesome == true }

文档数组(Ruby 1.9.3),#select方法

于 2012-12-13T16:44:55.993 回答