gpt4 book ai didi

ruby-on-rails - 什么时候执行 ActiveRecord 查询?

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:38 24 4
gpt4 key购买 nike

我对 Ruby 如何执行查询感到困惑:

假设我们有两种方法:

def meet1
user = User.all
end

每次我调用这个方法时,我都会运行一个查询,上面写着:

'User Load (18.3ms) SELECT "users".* FROM "users" INNER JOIN "roles" ON "roles"."user_id" = "users"."id" WHERE "users"."banned" = 'f' AND "roles"."description" = 'gogetter''

这意味着它查询用户...

假设我有另一种方法:

def meet2
user = User.all
user.to_sql
end

当我调用它时,它返回了该查询的 SQL 格式:

所以我的问题是在第一种方法中执行了查询,但在第二种方法中执行了查询吗?或者它只是向我显示最终结果而不执行查询,因为我从未使用过它?

最佳答案

user = User.all 只是创建一个潜在的查询,并生成它的一个副本到user 中。这遵循“ builder 模式”; user 然后可以说 user.joins(...)user.order(...) 来构建不同的潜在查询.它们都返回查询的 spawned 副本。

您对 meet1 所做的操作会触发对数据库的实际命中。我怀疑像 p meet1 这样无害的东西,甚至你的 IRB shell,都可以将 spawned 潜在数据库查询评估为 Enumeration,这然后访问数据库。

关于ruby-on-rails - 什么时候执行 ActiveRecord 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50960795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com