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

时间:2017-05-05 19:47:22

标签: elixir phoenix-framework ecto

我有以下架构。

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

正如您所看到的,我有两个belongs_to关系,我想在这里定义,对应于发送邮件的用户,以及发送此邮件的用户。在消息表中,我有两个名为user_to_iduser_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

我做错了什么?

1 个答案:

答案 0 :(得分:5)

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

<li>
    <span>Second Level</span>
    <ul>
        <li><span>Third Level</span></li>
        <li><span>Third Level</span></li>
    </ul>
</li>

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