我有4张桌子,分别是:
Category -> sub1 -> sub2 -> product表已定义
类别
-name
-id
-descriptionsub1
-id
-category_id
-name
-descriptionsub2
-id
-sub1_id
-name
-description产品
-id
-sub2_id
-name
-description
-color我将我的模式定义为:
category.ex
schema "categories" do
field :name, :string
timestamps()
endsub1.ex
schema "sub1" do
field :name, :string
belongs_to :category, App.Category
timestamps()
endsub2.ex
schema "sub2" do
field :name, :string
belongs_to :sub1, App.Sub1
timestamps()
endproduct.ex
schema "product" do
field :name, :string
belongs_to :sub2, App.Sub2
timestamps()
end在我的控制器中,我尝试将sub2和sub1预加载为
products = Product
|> Repo.all
|> Repo.preload(:sub2)
|> Repo.preload(sub2: :sub1)而且它起作用了。但是,当我尝试将类别预加载为
products = Product
|> Repo.all
|> Repo.preload(:sub2)
|> Repo.preload(sub2: :sub1)
|> Repo.preload(sub1: :category)我收到一个错误,说产品与sub1没有关联。有没有办法让这件事起作用?最终,我希望能够做到
product.sub2.sub1.category.name,它将输出类别的名称。
发布于 2017-11-09 05:47:01
你试过Repo.preload(sub2: [sub1: [:category]])吗?
错误来自于最后一个预加载
Repo.all(Product)
|> Repo.preload(sub2: sub1)
|> Repo.preload(sub1: :category)实际上回到了原始查询,所以它本质上是
Repo.all(Product)
|> Repo.preload(sub1: :category)根据您的模式,这是无效的。
https://stackoverflow.com/questions/47188082
复制相似问题