关于 activerecord:Parent object eager load 嵌套关联 Rails

Parent object eager load nested associations Rails

在 Rails 4 中,我有以下模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Parent < ActiveRecord::Base
 has_many :sons
 has_many :grand_sons, through: sons

 scope :load_tree, (id) -> {Parent.includes(sons: [:grand_sons]).find(id)}
end

class Son < ActiveRecord::Base
  belongs_to :parent
  has_many :grand_sons
end

class GrandSon < ActiveRecord::Base
  belongs_to :son
end

使用 load_tree 我想获得一个像这样的对象:

1
2
3
4
5
6
7
8
9
10
{
  id: 1,
  sons: [
          {
            id: 1,
            parent_id: 1,
            grand_sons:[ { id: 1, son_id: 1, } , ...]
          }, ...
        ]
 }

但是在做了 tree = Parent.load_tree(1) 之后我得到了 tree # <Parent id=1> tree.sons #[<Son id=1>, <Son id =2>] 所以我似乎无法急切加载所有对象,有什么建议吗?


试试

1
Parent.includes(:sons, {:sons => :grand_sons}).find(id)

我的理解是,您必须明确指定嵌套关联的关系。