【问题标题】:How to understand when a activerecord query is executed?如何理解何时执行 activerecord 查询?
【发布时间】:2019-11-18 15:08:38
【问题描述】:

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

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

这会击中 db 吗?

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

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

【问题讨论】:

    标签: sql ruby-on-rails database activerecord hit


    【解决方案1】:

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

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

    第二行也一样,如果你在控制台上运行users.where(....),解释器会尝试渲染集合,这样它就会访问数据库,但在脚本中它不会运行查询,直到你真正做某事用那个。

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

    【讨论】:

    • RailsPanel chrome extension 是另一种查看通过呈现特定页面生成的查询的方法。与日志相同的信息,但在 GUI 中。
    • “interpreter”在这里也是错误的术语。在控制台中,它实际上是读取评估打印循环 (REPL),它通过在表达式上调用 #inspect 来打印表达式的返回值,从而导致关系被加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    相关资源
    最近更新 更多