我有4个表,即:
Category -> sub1 -> sub2 -> product
表定义
分类
-name
-id
-description
SUB1
-id
-category_id
-name
-description
SUB2
-id
-sub1_id
-name
-description
产品
-id
-sub2_id
-name
-description
-color
我将我的架构定义为:
category.ex
schema "categories" do
field :name, :string
timestamps()
end
sub1.ex
schema "sub1" do
field :name, :string
belongs_to :category, App.Category
timestamps()
end
sub2.ex
schema "sub2" do
field :name, :string
belongs_to :sub1, App.Sub1
timestamps()
end
product.ex
schema "product" do
field :name, :string
belongs_to :sub2, App.Sub2
timestamps()
end
在我的控制器中我试过preload sub2和sub1 as
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
在我的模板中,它会输出类别的名称
答案 0 :(得分:0)
您是否尝试过Repo.preload(sub2: [sub1: [:category]])
错误来自
中的最后一次预加载Repo.all(Product)
|> Repo.preload(sub2: sub1)
|> Repo.preload(sub1: :category)
实际上回到原始查询,所以它本质上是
Repo.all(Product)
|> Repo.preload(sub1: :category)
根据您的架构无效。