Nei*_*ein 8 activerecord ruby-on-rails
假设我有一个Candle具有 ' today' 范围的模型。范围运行了一些繁重的条件,结果给了我大约 5k 行。
today_candles = Candle.today
Run Code Online (Sandbox Code Playgroud)
我想稍后用列值过滤这个集合。例如:
aaa_candles = today_candles.where(type: 'AAA')
bbb_candles = today_candles.where(type: 'BBB')
...
Run Code Online (Sandbox Code Playgroud)
但是每个过滤器都在发出一个新的数据库请求,如下所示:
Candle.today.where(type: 'AAA')
Candle.today.where(type: 'BBB')
...
Run Code Online (Sandbox Code Playgroud)
有没有办法在today_candles不发出新的多个数据库请求的情况下过滤初始收集数据?感觉就像一个基本功能,但我找不到它。
我目前将集合存储为一个数组,然后循环遍历它们以过滤并避免多个 db 调用。但这感觉很愚蠢。
请注意:我不确定 Rails 是否会缓存 AR 集合并在生产环境中没有新的 db_queries 的情况下过滤它们。我目前在 webrick(开发)上。
Igo*_*lov 11
如果您想稍后过滤 - 只需将关系视为数组。例如,使用 select 进行过滤:
today_candles.select { |x| x.type == 'AAA' }
Run Code Online (Sandbox Code Playgroud)