【问题标题】:How to eager load association for an array of model records如何为一组模型记录急切加载关联
【发布时间】:2012-09-24 08:54:03
【问题描述】:

我有一组 Rails 模型记录。是否可以一次性(查询)急切加载所有这些记录的关联?

有时我只有一个数组而不是 AR::Scope。有时我想动态选择稍后要加载的内容。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

    在 Rails 3 中,可以使用 preloader 对现有记录进行预加载关联。

    ActiveRecord::Associations::Preloader.new(posts,:comments).run()
    

    在 Rails 4.1+ 中调用签名changed slightly

    ActiveRecord::Associations::Preloader.new.preload(posts,:comments)
    

    【讨论】:

    • 这在 Rails 4.2 中已被弃用
    • Rails4: ActiveRecord::Associations::Preloader.new.preload(posts, :catalogs)
    • @LeoCorrea 我没有看到它在 Rails 4.2 中被弃用。您能否提供一些提示,我可以在哪里找到弃用说明?谢谢。
    • ActiveRecord::Associations::Preloader.new.preload(posts,:comments) 在 Rails 5 中仍然有效!
    【解决方案2】:

    嗯,你可以重新找到那些对象。将 ':id' 映射到您的数组上,以获取记录的 id,然后重新查找,这次是急切加载。

    如果您的 Post 模型记录数组是 posts,那么它将是:

    Post.find(posts.map &:id).includes(:blah)
    

    【讨论】:

    • 我的集合很大,所以重新加载太贵了。我希望有一种 API 方式。
    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多