【发布时间】:2012-09-24 08:54:03
【问题描述】:
我有一组 Rails 模型记录。是否可以一次性(查询)急切加载所有这些记录的关联?
有时我只有一个数组而不是 AR::Scope。有时我想动态选择稍后要加载的内容。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord
我有一组 Rails 模型记录。是否可以一次性(查询)急切加载所有这些记录的关联?
有时我只有一个数组而不是 AR::Scope。有时我想动态选择稍后要加载的内容。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord
在 Rails 3 中,可以使用 preloader 对现有记录进行预加载关联。
ActiveRecord::Associations::Preloader.new(posts,:comments).run()
在 Rails 4.1+ 中调用签名changed slightly:
ActiveRecord::Associations::Preloader.new.preload(posts,:comments)
【讨论】:
ActiveRecord::Associations::Preloader.new.preload(posts, :catalogs)
ActiveRecord::Associations::Preloader.new.preload(posts,:comments) 在 Rails 5 中仍然有效!
嗯,你可以重新找到那些对象。将 ':id' 映射到您的数组上,以获取记录的 id,然后重新查找,这次是急切加载。
如果您的 Post 模型记录数组是 posts,那么它将是:
Post.find(posts.map &:id).includes(:blah)
【讨论】: