2017-05-05 18 views
1

私は以下のスキーマを持っています。エリクシールエクト:スキーマの複数の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 

あなたが見ることができるように、私はこのメッセージが送信された者へのメッセージ、およびユーザーを送信したユーザに対応する、私はここで定義したい2体のbelongs_to関係を持っています。メッセージテーブルには、user_to_iduser_from_idの2つのフィールドがあります。

しかし、これは次のエラーで失敗します。私は間違って何をやっている

== 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:messages、FPL.Message'は正しいですか? –

+2

これを試してください: 'has_many:messages_to、FPL.Message、foreign_key :: user_to_id'(そして' to'-> 'from')。 – Dogbert

関連する問題