2015-10-14 74 views
6

我想獲得在Ecto中工作的has_many :through關係,該關係在User模型和Group模型之間存在多種關係。Ecto has_many:通過形式

我能在網上找到的唯一信息是在一個崗位由何塞·Valim here(這是優秀的,順便說一句)有關嵌套的屬性。

由於這些組已經存在於系統中,我希望做一個多選輸入。我遇到過幾個問題。我不認爲可以直接在變更集中分配groups關聯,因爲每次我嘗試這樣做時都會收到錯誤。我的下一個想法是手動完成這項工作(查找,刪除和插入GroupMembership記錄),但我不確定這是否是正確的途徑,並希望先得到一些建議。

由於代碼示例有很多行,我做了一個要求here

如果我最好直接在這個問題中發佈它,我當然可以做到這一點。

感謝您的幫助!

+0

我不能說Ecto代碼,但我可以講DB設計原則。關係數據庫排序會告訴你,你不能建模n到n關係。你所做的是建立一個關係表(在你的情況下就像UsersInGroups),然後你從用戶和組構建一個1-n。我不確定這會有助於您的Ecto問題,但它可能是更好的數據建模方法。 FWIW。 –

回答

3

不幸的是,Ecto 1.0不支持多對多。這意味着您需要收到ID並手動爲每個與用戶關聯的組建立中間關聯。我們希望在未來的版本中使這更容易。

編輯:Ecto 2.0支持many_to_many。

+0

感謝您的高舉! –

+2

爲了確認,Ecto確實支持has_many:through(通過連接表),而不是Rails風格的has_and_belongs_to_many。是對的嗎? Docs:http://hexdocs.pm/ecto/Ecto.Association.HasThrough.html – neon

+0

@Joséecto的最新版本仍然如此? (截至2018年1月,爲2.27) – dsignr