【问题标题】:Elixir Ecto: Multiple belongs_to relationship in a schemaElixir Ecto:模式中的多个belongs_to关系
【发布时间】:2017-05-05 19:47:21
【问题描述】:

我有以下架构。

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

我做错了什么?

【问题讨论】:

    标签: elixir phoenix-framework ecto


    【解决方案1】:

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

    belongs_to :user_to, FPL.Club, foreign_key: :user_to_id
    belongs_to :user_from, FPL.Club, foreign_key: :user_from_id
    

    此处指定的名称是结构体中 Ecto 将加载引用记录的字段,需要唯一。

    【讨论】:

    • 那行得通。然后如何在用户模式上使用has_many 关系? has_many :messages, FPL.Message 正确吗?
    • 试试这个:has_many :messages_to, FPL.Message, foreign_key: :user_to_id(然后是to -> from)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多