ruby activerecord关系集合搜索

时间:2014-12-17 15:23:23

标签: ruby-on-rails ruby activerecord

为了加快当前在循环(bar = find_or_create_by()....)中运行太多数据库查询的代码,以便创建一个包含foo.bar_id = bar.id之类的东西的连接条目,我想我自己将所有bars存储在内存中,并在循环之前加载一个Bar.all。问题是如何快速搜索所有这些bars中的特定bar.name?我试过了bar.where(name: ...),但这又回到了数据库。

2 个答案:

答案 0 :(得分:1)

我认为你需要的是:

bars.select { |bar| bar.name == 'the name I want' }

这会使用Enumerable的{​​{1}} API从集合中选择与查询匹配的元素。

答案 1 :(得分:1)

如果我正确地理解你的问题,为了加速这些事情,你可以获得所有的条形图,并将它们放在内存中,将每个条形图(bar.name)映射到一个条形数组。

例如:

bars_hash = Bar.all.group_by(&:name)

然后,

bars_hash[name]

将返回与名称匹配的所有栏,如果没有,则返回nil。 这样,您将避免对每个Foo执行顺序搜索。

但是,如果你有,我希望如果你有太多Bar s

,你的记忆力将不会填满