为什么我收到#Ecto.Association.NotLoaded?

2024-03-18

我有团队,每个团队都有用户,因此有一个连接表将用户链接到团队,因为它是多对多关系,这是我的模型:

defmodule App.Team do
  use App.Web, :model

  schema "teams" do
    field :owner_id, :integer
    has_many :team_users, {"team_user", App.TeamUser}
  end

end
defmodule App.User do
  use App.Web, :model

  schema "users" do
    # field :email, :string
    has_many :team_user, App.TeamUser
  end
end

这是连接模型:

defmodule App.TeamUser do
  use App.Web, :model

  @primary_key false
  schema "team_user" do
    belongs_to :user, App.User
    belongs_to :team, App.Team
  end

end

如果我运行查询来获取用户的所有团队以及所有结果团队的用户,如下所示:

teams_users =
      from(t in Team, where: t.owner_id == ^user_id)
      |> Repo.all()
      |> Repo.preload(:team_users)

我得到这个日志:

[%App.Team{__meta__: #Ecto.Schema.Metadata<:loaded>, id: 1,
  is_base_team: true, owner_id: 3,
  team_users: [%App.TeamUser{__meta__: #Ecto.Schema.Metadata<:loaded>,
    team: #Ecto.Association.NotLoaded<association :team is not loaded>,
    team_id: 1,
    user: #Ecto.Association.NotLoaded<association :user is not loaded>,
    user_id: 3},
   %App.TeamUser{__meta__: #Ecto.Schema.Metadata<:loaded>,
    team: #Ecto.Association.NotLoaded<association :team is not loaded>,
    team_id: 1,
    user: #Ecto.Association.NotLoaded<association :user is not loaded>,
    user_id: 4},
   %App.TeamUser{__meta__: #Ecto.Schema.Metadata<:loaded>,
    team: #Ecto.Association.NotLoaded<association :team is not loaded>,
    team_id: 1,
    user: #Ecto.Association.NotLoaded<association :user is not loaded>,
    user_id: 5}]}]

在日志中,我得到了 id 为 1 的团队,及其所有用户的 id:(3, 4, 5) 但为什么我得到了user: #Ecto.Association.NotLoaded<association :user is not loaded>?我没有要求以任何方式加载该 id 的用户..那为什么我收到这样的警告?

我在用{:phoenix_ecto, "~> 3.0-rc}


您需要预加载:user以及:team_users:

teams_users =
  from(t in Team, where: t.owner_id == ^user_id)
  |> Repo.all()
  |> Repo.preload(team_users: :user)

文档中有一个关于嵌套关联的部分。https://hexdocs.pm/ecto/Ecto.Query.html#preload/3 https://hexdocs.pm/ecto/Ecto.Query.html#preload/3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我收到#Ecto.Association.NotLoaded? 的相关文章

随机推荐

  • 如何获取数据透视表每行的最大和最小列数?

    非常感谢 约翰卡佩莱蒂 https stackoverflow com users 1570000 john cappelletti他展示了如何旋转桌子 这是一个示例数据 DECLARE OperatorPrice TABLE ID int
  • vuejs2:我如何销毁观察者?

    我怎样才能摧毁这个观察者 当我的异步数据从父组件加载时 我的子组件中只需要一次 export default watch data function this sortBy 格雷戈尔 如果通过调用 vm watch 函数动态构造观察程序 它
  • JAVA:如何将私钥保存在具有密码保护的 pem 文件中

    我正在尝试将私钥保存在pem文件 受密码保护 问题是 pem文件已创建 我 甚至可以用 openssl 打开它 但是不需要密码 这是代码 KeyPairGenerator keygen KeyPairGenerator getInstanc
  • For Each 循环的逆序

    VB 最强大的功能之一是能够循环访问集合中的对象而不引用索引 for each loop 我发现它非常有用 只想从集合中删除对象 当从预定义对象 例如电子表格上的行 中删除对象时 如果我使用索引并从最大的对象开始并返回到第一个 则代码会更简
  • smartpackage 中的 Meteor 项目路径

    我正在寻找一种从智能包中查找流星项目路径的方法 例如 获取 meteor 文件夹所在目录的路径 我无法使用节点的 dirname 和 filename 来完成此操作 因为不知何故在流星中它们不可用 有小费吗 从 Meteor 0 6 0 开
  • 如何等待所有协程完成?

    我正在启动一个协程 我希望它在恢复执行主线程之前完成 我的代码简化如下 fun hello for i in 0 100 println hello fun main args Array
  • 多个环境中的 Azure 云服务项目配置(.csdef 和 .cscfg)

    目前我们有一个开发云服务 acme dev service 和一个生产云服务 acme prod service 我们解决方案中当前的设置有一个名为 acme application 的云服务项目 它使用 cscfg 和 csdef 文件的
  • Firebase 电话身份验证在发布时不起作用 (Android)

    当使用我的应用程序的调试版本时 电话身份验证有效 当我在手机上手动安装发布签名的 apk 时 电话身份验证也有效 但是当我将相同的工作 apk 发布到 Play 商店 Alpha 测试 时 我无法使其工作 经过一番挖掘后得到了这个 此应用无
  • Tidyr 与可选组分开

    我正在尝试使用extract来自 tidyr 包 将包含单个字符串的列拆分为 3 个单独的列 该问题的最小工作示例如下 A tibble 3 x 1 question codes
  • jquery ajax post成功返回数据

    我无法取回我的数据 这是我的代码 哪里有问题 谢谢 索引 php
  • 如何使用嵌套生成器编写 jqwik 生成器方法

    使用 jqwik net 尝试生成一个 Rule 类 其中包含一个嵌套的 RuleConfig 类 RuleConfig 类有一个嵌套的ruleProps 它是一个Map statusReturnedFromApplyingRule 方法始
  • 如何序列化包含指向原语的指针的类?

    我正在尝试使用 boost 的功能来序列化指向原语的指针 这样我就不必自己取消引用并进行深度存储 然而 当我尝试这样做时 我遇到了一堆错误 这是一个应该包含的类的简单示例save and load从文件中写入和读取类内容的方法 该程序无法编
  • 如何访问查询结果? [复制]

    这个问题在这里已经有答案了 我正在编写一个简单的测试来验证 id 列中不同值的数量与每个表的行数匹配 我期望能够访问对象的特定值 但是当我运行代码并尝试打印变量的值时 我可以看到我的对象是一个 sqlalchemy engine resul
  • jQuery 滚动对吗?

    我有以下代码 似乎可以在单击时将 div 一直滚动到左侧 我想知道是否 有一种方法可以让它一次只滚动 200px 我也可以让它向右滚动 试图查看 jQuery 文档 但找不到scrollToRight 函数 这是我的代码 leftArrow
  • 是否可以在 Firebase 上查询 !equalTo: null ?

    我使用此查询来验证我的 Firebase 上是否存在数据 使用 AngularFire2 let aux this afData list drivers query orderByChild accountHistory approved
  • Ruby on Rails“content_for:title”如何获得稍后分配的内容?

    简短的问题是 子页面如何 set the title主要布局 details 我们可以在应用程序布局中使用application html erb
  • 通过终端列出视频设备

    如何通过终端列出计算机的视频设备 有没有列出它们的命令 列出视频output设备 例如监视器 system profiler SPDisplaysDataType 这会产生如下所示的输出 Graphics Displays Intel HD
  • 动态加载 Jar 并实例化已加载类的对象

    我尝试将 jar 动态加载到我的 Java 项目中 这是类加载器的代码 public class ClassLoad public static void main String args String filePath new Strin
  • 如何强制将特定程序集加载到 MVC 2 应用程序的每个应用程序域中?

    我有一些松散耦合的代码 这些代码取决于加载到当前应用程序域中的特定程序集 Assembly assembly AppDomain CurrentDomain GetAssemblies Where candidateAssembly gt
  • 为什么我收到#Ecto.Association.NotLoaded?

    我有团队 每个团队都有用户 因此有一个连接表将用户链接到团队 因为它是多对多关系 这是我的模型 defmodule App Team do use App Web model schema teams do field owner id i