Ecto, похоже, поддерживает полиморфную ассоциацию, когда я читаю https://github.com/elixir-lang/ecto/issues/389 и связанные с ней связанные с ней проблемы.
Скажем, мне нужна ассоциация модели Comment на моделях задач и событий. Если мое понимание связи Ecto с пользовательским источником правильное, тогда нам нужны четыре таблицы и три модели,
Таблица
- Задачи
- События
- tasks_comments
- events_comments
Model
- Task
- Событие
- Комментарий
Модель задач и событий будет иметь ассоциацию 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
Теперь, что я не понимаю, как выглядит модель комментария?
Как модель комментария обрабатывает две таблицы? и как он обрабатывает принадлежность к ассоциации с различными моделями?