我是一名PHP开发人员,学习Ruby on Rails的优点,我喜欢ActiveRecord,我注意到一些非常有趣的东西,这就是ActiveRecord方法检测方法链结束执行查询的方式.
@person = Person.where(name: 'Jason').where(age: 26)
# In my humble imagination I'd think that each where() executes a database query
# But in reality, it doesn't until the last method in the chain
Run Code Online (Sandbox Code Playgroud)
这个巫术是如何运作的?
我目前正在尝试理解ActiveRecord如何工作以链接条件方法然后执行sql请求.
理解方法链接非常简单,我想到的一切都很好地解释并在这里重新开始.
但是,我仍然无法弄清楚,上面的文章没有解释:ActiveRecord如何知道何时执行SQL请求.
例如,如果我编写代码User.where(some_column: "hello").limit(5),ActiveRecord将实例化查询构建器,请设置有关some_column值和有限数量结果的条件.
但是,在执行之后 .limit(5),它还会执行请求并返回结果:ActiveRecord如何知道?怎么知道它是最终的条件方法,它需要返回一个结果?它是否在每个链接条件下执行SQL请求?
在我上面发布的文章中,作者通过调用最终方法来进行欺骗,该方法each正在执行请求并返回结果.
ruby activerecord ruby-on-rails method-chaining ruby-on-rails-4