有效地引用关联的ActiveRecord模型的属性(Rails 4)

时间:2014-05-13 16:58:51

标签: ruby-on-rails activerecord rails-activerecord foreign-key-relationship

假设我有一个用户has_many发布的帖子和用户模型。用户模型具有name属性。

假设我想在Post对象的查询中显示每个User#name Post.all.each {|post| puts post.user.name}。这是有效的,但Rails为每个N帖子发出数据库查询,以查找每个用户的名称,如

SELECT  "users".* FROM "users"  WHERE "users"."id" = ? LIMIT 1  [["id", 25]]

有没有办法告诉Rails它可以通过连接查找,而不是为每个实例发出单独的查询?如果我尝试使用Post.all.joins(:user).select('posts.*,users.name')之类的标准联接,则ActiveRecord :: Relation对象会相应地返回,但在迭代期间,仍会为该行中的每个Post发出新查询。

1 个答案:

答案 0 :(得分:3)

你可以尝试:

Post.includes(:user)

这称为急切加载,性能明智这应该只发出两个数据库查询(check docs here

当您需要在加载时应用条件时,文档建议使用Joins(例如,名称以's'开头的用户的帖子)

相关问题