新手问题 如何处理 ActiveRecord_Relation 对象

ForrestDouble · 2017年04月01日 · 最后由 yfractal 回复于 2017年04月11日 · 2352 次阅读

最近遇到一些 rails 查询的难题,大部分都是关于 ActiveRecord_Relation 对象的。。 有几个新手问题我现在没有搞明白 我们经常用 where 查询,查询后的结果是 ActiveRecord_Relation,这相当与一个集合的概念吗?为什么不可以进行遍历,获取其中的值,每个数据的值

jasl 回复

感谢大神的回复,今天写了遍历,把循环都写在内存里面,所以感觉 rails 的原理这方面的东西,还是深入的了解,尤其是 ORM,这块地的延迟加载

ForrestDouble 回复

你要有一定编程经验的话,可以读读 CollectionProxy 的源码,大概浏览一下就知道他想干啥了,实现比较复杂,但是意图很明显的

@jasl 请问下如何进行一些复杂的分组查询?

jasl 回复

哇哦,一直在用Relation,但是对其一知半解,今天总算理解它的意图。哈哈。3q

ActiveRecord::Relation用到了很多函数式编程的思想。

  1. 有需要,才会真的去做查询、装载成对象,这样可以避免没意义的执行。 也就是是函数式中的 lazy。lazy 可以带来很多好处,比如模块化,不需要对中间值进行计算,无限长的数组

  2. 每一次方法的调用,都返回一个新的ActiveRecord::Relation对象,而不是做修改。 所谓的 pure function。另外用到了 chain 这个 pattern,jQuery 采用了同样的设计方法。

想进一步了解的话,可以看下这篇文章 http://patshaughnessy.net/2014/9/17/20000-leagues-under-activerecord

需要 登录 后方可回复, 如果你还没有账号请 注册新账号