2017-05-05 53 views
1

我有以下模式。Elixir Ecto:模式中的多个belongs_to关系

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 

我在做什么错?

回答

5

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

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

这里指定的名称是在结构,其中外生将加载引用的记录,它必须是唯一的领域。

+0

这很有效。那么我如何在User模式上使用'has_many'关系?是'has_many:消息,FPL.Message'正确吗? –

+2

试试这个:'has_many:messages_to,FPL.Message,foreign_key :: user_to_id'(然后''''''from')。 – Dogbert