當我通過https://github.com/elixir-lang/ecto/issues/389及其相關問題閱讀時,Ecto似乎支持多態關聯。多態協會如何與Ecto協同工作?
假設我需要關於任務和事件模型的評論模型關聯。如果我的自定義源外生協會的理解是正確的,那麼我們就需要四個表和三款車型,
表
- 任務
- 事件
- tasks_comments
- events_comments
型號
- 任務
- 事件
- 評論
任務和事件模式將有如下的自定義源的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模型如何處理兩個表?以及它如何處理belongs_to與不同模型的關聯?
何塞,謝謝你的回答。您的答案有多個問題。也許這是微不足道的。 1.「評論模型沒有任何表格」=>評論模型如何在沒有模式的情況下工作。我正在閱讀'schema == table'。我如何驗證評論沒有架構,從而沒有更改集? 2.'軌道'如何在Ecto協會工作?有沒有任何示例代碼?我沒有看到閱讀源代碼或支持此文檔的文檔。 – shankardevy
1。評論模型沒有表格,但通過關聯構建時有一個表格。所以祕密是使用'assoc(task,:comments)'而不是'%Comment {}'。我在這裏記錄了這些:https://github.com/elixir-lang/ecto/commit/1d98ad795b8707ff8a9496657112603c14a64cc2 –
2.導軌方式在Ecto關聯中不起作用,因爲它通常是不好的做法,因爲數據庫無法保留其引用。你將不得不建立你的查詢並手動設置適當的字段。 –