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