【问题标题】:Rails 4 eager loading a model within modelRails 4 急切地在模型中加载模型
【发布时间】:2014-11-10 17:51:40
【问题描述】:

我有以下几点:

class ObjectA < ActiveRecord::Base
  has_one   :object_b
end

class ObjectB < ActiveRecord::Base
  belongs_to   :object_a
  has_one   :object_c
end

class ObjectC < ActiveRecord::Base
  belongs_to   :object_b
end

所以执行 ObjectA.eager_load(:object_b) 显然会急切加载 ObjectB。 但我正在尝试加载整个层次结构,而不必每次调用时都发出新查询:object_a.object_b.object_c

想法?

【问题讨论】:

    标签: activerecord ruby-on-rails-4 eager-loading


    【解决方案1】:

    如果你这样做

    ObjectA.includes(object_b: :object_c).where(...)
    

    这将急切地加载 ObjectA 的相关 ObjectB 以及每个匹配 where(...) 条件的 ObjectA 的嵌套 ObjectC

    如果您希望在执行预加载时避免重复上述查询格式,您可以在 ObjectA 上创建一个类方法。

    class ObjectA < ActiveRecord::Base
      has_one   :object_b
    
      def self.with_related(conditions)
        includes(object_b: :object_c).where(conditions)
      end
    end
    

    参考:Eager Loading of Associations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2021-11-29
      相关资源
      最近更新 更多