gpt4 book ai didi

elixir - 与 ecto 的逆多态性

转载 作者:行者123 更新时间:2023-12-02 20:39:38 24 4
gpt4 key购买 nike

当前的 Ecto 文档 http://hexdocs.pm/ecto/Ecto.Schema.html仅解释当多态 Comment 可以同时属于 TaskPost 时,如何构建 belongs_to 类型的多态关联>。但是相反的方向呢?

例如,有一个 Listing,它可以具有四种类型的属性之一:RoomApartmentVila Office

考虑到一对一的关系,考虑到上面的例子,这意味着应该有 rooms_listingsapartments_listingsvila_listingsoffice_listings,这是不可能的,因为这会导致与 listings 关联的所有其他表出现重复。

问题是如何建模这种关系?

最佳答案

我认为对此进行建模的最简单方法是翻转关联的两侧,然后将 room_id 等字段添加到 listings 表中:

defmodule Listing do
use Ecto.Model
schema "listings" do
belongs_to :room, Room
belongs_to :apartment, Apartment
belongs_to :villa, Villa
belongs_to :office, Office
end
end

然后您可以在其他每个表上定义一个 has_one :listing 关系:

defmodule Room do
use Ecto.Model
schema "rooms" do
has_one :listing, Listing
end
end

defmodule Apartment do
use Ecto.Model
schema "apartments" do
has_one :listing, Listing
end
end

defmodule Villa do
use Ecto.Model
schema "villas" do
has_one :listing, Listing
end
end

defmodule Office do
use Ecto.Model
schema "offices" do
has_one :listing, Listing
end
end

关于elixir - 与 ecto 的逆多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33184593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com