如何使用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进行此操作?
答案 0 :(得分:2)
我是这样做的:
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/
答案 1 :(得分:1)
假设您有一些组织名称组织和一个名为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)