我疯了。现在工作半天我的问题,无法找到解决方案/错误。创建聊天时,我得到了一个聊天模型和一个将用户模型作为外键的chat_user模型。
聊天有has_many :chat_users, Test.Chat.ChatUser, foreign_key: :chat_id
个,而且chat_user有belongs_to :user, Test.User
和belongs_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)
最后我发现了错误。与我的迁移或模型无关。问题是由某些环境配置引起的。构建开发和测试数据库的脚本没有删除测试数据库,因此它在chat_users表中没有user_id。在docker容器内进行混合测试时发生错误,因此发现错误并不容易。我是elixir的新手,仍然讨厌堆栈跟踪,用于读取一些不错的c#stacktrace;) 但感谢你的帮助。