Elixir Ecto:模式中的多个 belongs_to 关系
Elixir Ecto: Multiple belongs_to relationship in a schema
我有以下架构。
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
关系,我想在这里定义,分别对应于发送消息的用户和接收此消息的用户。在消息 table 中,我有两个字段名为 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
我做错了什么?
您需要为关系使用不同的名称:
belongs_to :user_to, FPL.Club, foreign_key: :user_to_id
belongs_to :user_from, FPL.Club, foreign_key: :user_from_id
这里指定的名称是结构体中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
关系,我想在这里定义,分别对应于发送消息的用户和接收此消息的用户。在消息 table 中,我有两个字段名为 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
我做错了什么?
您需要为关系使用不同的名称:
belongs_to :user_to, FPL.Club, foreign_key: :user_to_id
belongs_to :user_from, FPL.Club, foreign_key: :user_from_id
这里指定的名称是结构体中Ecto加载引用记录的字段,需要是唯一的。