https://github.com/elixir-lang/ecto/issues/389とそこからリンクされている関連する問題を読んでみると、Ecto はポリモーフィック アソシエーションをサポートしているようです。
Task モデルと Event モデルに Comment モデルの関連付けが必要だとします。Ecto とカスタム ソースの関連付けに関する私の理解が正しければ、4 つのテーブルと 3 つのモデルが必要になります。
テーブル
- タスク
- イベント
- タスク_コメント
- イベントコメント
モデル
- 仕事
- イベント
- コメント
タスクおよびイベント モデルには、以下のようにカスタム ソースとの has_many 関連付けがあります。
defmodule ExampleApp.Task do
use ExampleApp.Web, :model
schema "tasks" do
field :title, :string
field :body, :string
has_many :comments, {"tasks_comments", Comment}
timestamps
end
end
defmodule ExampleApp.Event do
use ExampleApp.Web, :model
schema "events" do
field :title, :string
field :body, :string
has_many :comments, {"events_comments", Comment}
timestamps
end
end
私が理解していないのは、コメントモデルがどのように見えるべきかということです?
Comment モデルは 2 つのテーブルをどのように処理しますか? そして、異なるモデルへの属しへの関連付けをどのように処理しますか?