Elixir Ecto:模式中的多个belongs_to关系

Sak*_*hta 3 elixir ecto phoenix-framework

我有以下架构.

defmodule Message do
  use Ecto.Schema

  schema "messages" do
    belongs_to :user, FPL.Club, foreign_key: :user_to_id
    belongs_to :user, FPL.Club, foreign_key: :user_from_id
  end
end
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有两个belongs_to我想在此定义的关系,对应于发送邮件的用户以及发送此邮件的用户.在消息表中,我有两个名为user_to_id和的字段user_from_id.

但是这失败了以下错误:

== Compilation error on file lib/message.ex ==
** (ArgumentError) field/association :user is already set on schema
    lib/ecto/schema.ex:1697: Ecto.Schema.put_struct_field/3
    lib/ecto/schema.ex:1677: Ecto.Schema.association/5
    lib/ecto/schema.ex:1512: Ecto.Schema.__belongs_to__/4
    lib/message.ex:12: (module)
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Dog*_*ert 8

您需要为关系使用不同的名称:

belongs_to :user_to, FPL.Club, foreign_key: :user_to_id
belongs_to :user_from, FPL.Club, foreign_key: :user_from_id
Run Code Online (Sandbox Code Playgroud)

此处指定的名称是结构中的字段,其中Ecto将加载引用的记录,该记录必须是唯一的.

  • 试试这个:`has_many:messages_to,FPL.Message,foreign_key :: user_to_id`(然后`to` - >`from`). (3认同)