2017-10-11 9 views
0

私は狂っています。今私の問題で半日働いて、解決策/エラーを見つけることができません。チャットを作成すると、チャットモデルとチャットモデルが得られます。このモデルには、ユーザーモデルが外部キーとして用意されています。エリクシール/フェニックスエクトプリロードアソシエーションがhas_manyで動作しない

チャットはhas_many :chat_users, Test.Chat.ChatUser, foreign_key: :chat_idと多くあり、chat_userはbelongs_to :user, Test.Userbelongs_to :chat, Test.Chat.Chatです。

私はとの関連付けをプリロードしています:

defp preload_associations(chat, params \\ nil) do 
    Repo.preload(chat, [ 
    :chat_users 
    ]) 
    end 

私が手にエラーがある:** (Postgrex.Error) ERROR 42703 (undefined_column): column c0.user_id does not exist

chat_usersデータベースには、外部キーでフィールドuser_idを持っています。私のように、Ectoはchat_userの代わりにuser_idをチャットで探しています。

私が間違っていることは何ですか?ありがとう。

EDIT:モデル

defmodule Test.Chat.ChatItem do 
@moduledoc false 

use Test.Web, :model 

schema "chats" do 
    field :name, :string 
    ... 
    has_many :chat_users, Test.Chat.ChatUser, foreign_key: :chat_id 
    timestamps() 
end 


defmodule Test.Chat.ChatUser do 
use Test.Web, :model 

schema "chat_users" do 
    ... 
    belongs_to :user, Test.User 
    belongs_to :chat, Test.Chat.Chat 
end 

そして

defmodule Test.User do 
... 
+0

あなたのモデルをここに掲載したほうがいいです。モデルのエラーをインワードの説明よりも見つけやすくなります。 –

+0

'foreign_key :: chat_id'を' has_many'定義から削除してみてください。 –

+0

そして...あなたはchat_usersをあらかじめロードしたいのですか、代わりにユーザーをプリロードしたいのですか? –

答えて

0

最後に私がエラーを検出しました。マイグレーションやモデルとは関係ありませんでした。この問題は、一部の環境設定によって発生していました。開発とテストのデータベースを構築するスクリプトはテストデータベースを削除しなかったので、chat_usersテーブルにuser_idはありませんでした。ドッキング・コンテナ内でミックス・テストでエラーが発生したので、エラーを見つけることは容易ではありませんでした。私はエリクサーには新しく、まだスタックトレースを嫌い、良いC#stacktraceを読むのに使われた;) しかし、助けてくれてありがとう。

+0

これはおそらく、移行を実行してから変更したためです。この場合、混乱を修正するのはあなたの責任です。私は 'MIX_ENV =テストミックスdo ecto.drop、ecto.create、ecto.migrate'を行います。 –

関連する問題