如何建立和插入多对多关联

How to build and insert a Many to Many association

如何使用 ecto 的新 many_to_many 功能在两个具有 _many_to_many_ 关系的表之间建立关联?

我有从组织到用户的一对多关系:

organization = Organization.shortcode_changeset(%Organization{}, org_field)
organization = organization |> Repo.insert!
organization |> build_assoc(:users)

这给出了

%User{__meta__: #ecto.Schema.Metadata<:built, "users">,......}

user = Repo.preload(user, [:organization, :usergroup])

如何使用用户和组之间的 many_to_many 执行此操作?

这是我的做法:

user = user |> Repo.preload(:groups)
%Group{} 
|> Group.changeset(@group_field)
|> Repo.insert!
|> Repo.preload(:users)
|> change
|> put_assoc(:users, [user])
|> Repo.update 

只有在找到这篇使我能够继续的文章后,我才能做到这一点: http://blog.roundingpegs.com/an-example-of-many-to-many-associations-in-ecto-and-phoenix/

假设您有一些组织名称 org 和一个名为 user 的用户,您希望在它们之间建立关联,您将采取以下步骤在变更集中创建关联

changeset = Repo.preload(org, :users) # load the :users for the org
|> Organization.changeset(%{}) # somehow generate a changeset with no changes
|> Ecto.Changeset.put_assoc(:users, [user]) # creates the association

然后您剩下要做的就是像往常一样应用变更集。 即

Repo.update(changeset)