如何理解何时执行 activerecord 查询?

How to understand when a activerecord query is executed?

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

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

这会影响数据库吗?

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

使用完整 links/blogs 会有所帮助。

None 除非你对它们做些什么,否则上面的内容实际上命中了数据库。

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

第二行相同,如果您在控制台上 运行 users.where(....),解释器将尝试呈现集合,因此它会访问数据库,但在脚本中它不会运行 查询,直到您实际对其进行操作。

您可以查看服务器日志以更好地了解它。如果你在你的 rails 应用程序中执行这两行,你将不会看到任何查询,除非你执行 users.each do |user| ....users.firstuser.to_a 或类似的实际需要的东西查询为 运行.