ActiveRecord如何处理同一条目上的多个列查询?

时间:2015-12-30 05:08:37

标签: ruby-on-rails rails-activerecord

就效率而言,最好是这样做:

child = @user.child
foo1 = entry.foo1
foo2 = entry.foo2

foo1 = @user.child.foo1
foo2 = @user.child.foo2

其中@userChild具有一对一关联。

这些查询究竟如何在Rails中运行,特别是ActiveRecord? Rails是否隐式地将引用保存到控制器实例中的@user.entry,或者Rails是否会执行多个数据库查询?

其次,它是否依赖于ORM / DB?

1 个答案:

答案 0 :(得分:1)

您的示例都会触发3个查询(如果没有#includes

第一次访问#child,另外两位访问#foo1#foo2

如果在用户对象上调用N次#child方法,它将只触发一个数据库查询,因为ActiveRecord会在您第一次请求子对象时将子对象缓存到用户对象中。

如果您正在使用PostgreSQL,MySQL,SQLite等,ActiveRecord的行为将相同。 但其他ORM可能无法以这种方式实现。