Elixir 在记录之间插入异位

Elixir 在记录之间插入异位,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我对凤凰城是个新手,外星人生态系统。我试图创建中间表来处理多对多关系。不幸的是,我不知道如何创建包含用户和事件数据的变更集(插入变更集),在可用的源中查找这些信息时遇到了很大的困难。你能帮忙吗?至少我指出了正确的方向 当我使用关系执行另一项任务时,我使用build/2,但它只需要一个assoc参数 我创建了以下结构: 表1,包含事件的数据: schema "events" do field :name, :string field :address, :string f

我对凤凰城是个新手,外星人生态系统。我试图创建中间表来处理多对多关系。不幸的是,我不知道如何创建包含用户和事件数据的变更集(插入变更集),在可用的源中查找这些信息时遇到了很大的困难。你能帮忙吗?至少我指出了正确的方向

当我使用关系执行另一项任务时,我使用build/2,但它只需要一个assoc参数

我创建了以下结构:

表1,包含事件的数据:

schema "events" do
    field :name, :string
    field :address, :string

    field :location_x, :float
    field :location_y, :float

    field :date, Ecto.DateTime

    field :description, :string

    has_many :presences, Kpsz.Model.Presence
  end
表2,用户数据:

schema "users" do
    field :login, :string
    field :password, :string
    field :email, :string

    field :role, :integer

    field :name, :string
    field :surname, :string
    field :class, :string
    field :phone_number, :string
    field :avatar, :string

    has_many :presences, Kpsz.Model.Presence

    timestamps
  end
在保存事件的用户状态的表之间:

schema "presences" do
    belongs_to :user, Kpsz.Model.User, foreign_key: :user_id
    belongs_to :event, Kpsz.Model.Event, foreign_key: :event_id
  end

def changeset(user, params \\ :empty) do
    user
      |> cast(params, @required_fields, @optional_fields)
      |> foreign_key_constraint(:user_id)
      |> foreign_key_constraint(:event_id)
  end

以下模式定义应该完成您想要做的事情(根据您提供的模式进行简化):

defmodule事件do
使用异位模型
模式“事件”做什么
有很多:存在,存在
有许多:用户,通过:[:存在,:用户]
结束
结束
defmoduleuser-do
使用异位模型
模式“用户”做什么
有很多:存在,存在
有许多:事件,通过:[:存在,:事件]
结束
结束
DEF模块是否存在
使用异位模型
模式“存在”是什么
属于:用户,用户
属于:事件,事件
结束
结束
有关更多信息,请参阅使用
:至
选项的文档

预加载
:通过
关联也将预加载连接的关联,例如:

iex>event=event |>Repo.get!(1) |>回购预加载([:用户])
iex>#此时,event.presence和event.users都已加载
插入
状态
记录也可以直接完成:

iex>presence=%presence{user_id:1,event_id:1}|>Repo.insert!

非常感谢您的快速回复,我会尽快查看。我会不断收到您的回复“尝试插入模型时出现约束错误:*外键:存在\u用户\u id\u fkey如果要将此约束转换为错误,请在更改集中调用外键\u约束/3并定义正确的约束名称。”。变更集没有定义任何约束。”所以我调用了edited changeset方法(编辑的主要帖子的底部),在代码中我调用了您编写的精确代码(仅用于测试目的)现在可以工作了吗?
用户
事件
记录的
:User\u id
:Event\u id
必须已经存在,才能针对外键约束进行验证。现在可以工作了,我忘记了我不知道用户1如何…非常感谢您的帮助。