Ruby on rails 每次都会碰到数据库吗?

Ruby on rails 每次都会碰到数据库吗?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,如果我有: config/initializers/foobar.rb 其中: $foos = User.where(:foo => true).pluck(:id) 在我的应用程序中,当我调用$foo时,它是否每次都会命中数据库 或者,在服务器启动时,$foo是否只会命中数据库?$foos只是一个变量,因此它只会在被分配时命中数据库。您正在存储一个范围(即一组条件)。但是,该作用域将缓存它加载的内容,这样做(例如)$foos。每个{| user |…}只会在第一次使用时执行一次查询

如果我有:

config/initializers/foobar.rb 
其中:

$foos = User.where(:foo => true).pluck(:id)
在我的应用程序中,当我调用
$foo
时,它是否每次都会命中数据库


或者,在服务器启动时,
$foo
是否只会命中数据库?

$foos
只是一个变量,因此它只会在被分配时命中数据库。

您正在存储一个范围(即一组条件)。但是,该作用域将缓存它加载的内容,这样做(例如)
$foos。每个{| user |…}
只会在第一次使用时执行一次查询(分配时不执行)

但有些操作始终会触发查询,例如
$foos.count
将始终执行
选择计数(*)…
,而其他操作则取决于是否已加载范围

最后,例如,对该范围的进一步细化也会影响db

$foos.order('blah').first
将在每次使用时触发新查询。虽然在irb中测试时要小心,但应该很容易看到是否发生了这种情况:irb调用inspect来检查导致加载范围的表达式的结果