当多态var MyClass = function (param) {
this.field1 = param;
}
MyClass.prototype.changeField = function(param){
this.field1 = param;
}
var instance = Object.create(MyClass.prototype);
同时属于belongs_to
和{{1}时,当前的Ecto文档http://hexdocs.pm/ecto/Ecto.Schema.html仅解释了如何构建Comment
类型的多态关联}。但是相反的方向呢?
例如,Task
可以包含四种类型的属性之一:Post
,Listing
,Room
或Apartment
。
考虑到一对一的关系,鉴于上面的示例,这意味着应该有Vila
,Office
,rooms_listings
和apartments_listings
,这是不可能的,因为这将导致与vila_listings
相关联的所有其他表的重复。
问题是如何模拟这种关系?
答案 0 :(得分:5)
我认为最简单的建模方法是翻转关联的两侧,然后只将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