Rails:如何在不进行新的数据库查询的情况下过滤ActiveRecord集合结果?

时间:2017-03-02 19:28:25

标签: ruby-on-rails activerecord

说我有一个Candle模型' today'范围。范围运行一些繁重的条件,结果给我大约5k行。

today_candles = Candle.today

我想稍后使用列值过滤此集合。例如:

aaa_candles = today_candles.where(type: 'AAA')
bbb_candles = today_candles.where(type: 'BBB')
...

此过滤器的每个过滤器都按如下方式生成新的数据库请求:

Candle.today.where(type: 'AAA')
Candle.today.where(type: 'BBB')
...

有没有办法过滤初始集合today_candles数据而不会产生新的多个数据库请求?感觉就像一个基本的功能,但我找不到它。

我目前正在将集合存储为数组,然后循环遍历它们以过滤并避免多个数据库调用。但这感觉很愚蠢。

请注意:我不确定Rails是否会在生产环境中缓存AR集合并过滤它们而不使用新的db_queries。我目前正在使用webrick(开发)。

1 个答案:

答案 0 :(得分:2)

如果您想稍后过滤 - 只需将关系视为数组。例如,使用select:

进行过滤
today_candles.select { |x| x.type == 'AAA' }