2017-10-11 69 views
0

我越來越瘋狂。現在在我的問題上工作了半天,找不到解決方案/錯誤。創建一個聊天,我得到了一個聊天模型和一個chat_user模型,其中有一個用戶模型作爲外鍵。Elixir/Phoenix Ecto預緊組合不適用於has_many

Chat有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在聊天中搜索user_id而不是chat_user

任何想法我做錯了什麼?謝謝。

編輯:模型

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

嘗試從'has_many'定義中移除'foreign_key :: chat_id'。 –

+0

而且......你真的想預加載chat_users,還是要預加載用戶呢? –

回答

0

最後我發現的錯誤。與我的移民或模特無關。問題是由一些環境配置引起的。構建開發和測試數據庫的腳本不會丟失測試數據庫,因此chat_users表中沒有user_id。 Docker容器內部的混合測試發生錯誤,因此找到錯誤並不容易。我是新來的靈藥,仍然討厭stacktrace,用來讀取一些不錯的c#stacktrace;) 但謝謝你的幫助。

+0

這可能是因爲你運行了遷移,然後進行了更改。在這種情況下,您有責任解決這個問題。我做'MIX_ENV =測試混合做ecto.drop,ecto.create,ecto.migrate'。 –