2015-10-14 78 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