微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – Rails 3 ActiveRecord方法链接,引擎盖下

假设您构建了一个涉及多个方法链接查询,例如
Post.where('id > 10').limit(20).order('id asc').except(:order)

我想知道幕后发生了什么?据推测,链的每个部分都有助于构建一个sql SELECT,一旦链完成,就会执行语句,创建模型等.它如何“知道”链的末端在哪里?每个方法都返回一个创建sql片段的ActiveRecord :: Relation吗?

解决方法

你是对的,每个都返回一个 ActiveRecord::Relation.每个方法调用建立在它被调用的关系上(除了第一个,显然没有任何东西需要构建,因为它没有在关系上调用),并返回它.

它“知道”链的末尾在哪里,因为在您尝试操作/访问数据之前查询实际上并未执行,并且这样做(通常是隐式)调用to_a运行exec_queries.

原文地址:https://www.jb51.cc/ruby/268352.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐