0

我很难理解我们何时在 rails 活动记录中访问数据库以及我们何时构建查询。

users = User.where(org_id: 15) #db hit 1?

这会击中 db 吗?

users.where(is_suspended: false) #db hit 2?

使用完整的链接/博客会很有帮助。

4

1 回答 1

3

除非您对它们进行操作,否则上述所有内容都不会真正影响数据库。

users = User.where(org_id: 15)只创建一个表示查询的对象,如果您在控制台上运行该行,解释器将访问数据库,因为它会尝试呈现集合,但如果您在脚本中运行它,它不会运行实际的查询。

第二行也是如此,如果您users.where(....)在控制台上运行,解释器将尝试呈现集合,以便它访问数据库,但在脚本中它不会运行查询,直到您实际使用它。

您可以检查服务器日志以更好地理解它。如果您在 Rails 应用程序中执行这两行,则不会看到任何查询,除非您执行类似users.each do |user| ....orusers.firstuser.to_a类似的操作,实际上需要运行查询。

于 2019-11-18T17:19:12.137 回答