使用预加载时如何检查未定义的值,并且 return 没有值与 Ecto

How to check undefined value when use preload and return no value with Ecto

我正在用 ecto 做 phoenix 框架。

我写了下面的代码。

    query = from m in Member,
                 where: m.member_id == ^member_id,
                 preload: [:assoc1, :assoc2, :assoc3]

    Repo.all(query)

当所有预加载的 assocs 在数据库中都有相关值时,它就可以工作。

然而,当预加载 assocs 没有相关值时,它 returns null。 它会在 phoenix JSON 视图中导致错误 function nil.assoc3/0 is undefined

我想展示JSON。例如,当 assoc3 值为 nil 时,如果我能得到关注 JSON,我很高兴。

[{"member_id":1, "assoc1":"xxx", "assoc2":"yyy", "assoc3":""}]

请给我建议如何管理没有相关的零值。

assoc3 似乎不是 nil 的问题。根据错误消息,视图尝试调用 nil.assoc3,这意味着数据库没有返回初始查询的结果(阅读:没有 Member。)

您应该验证来自数据库的响应并为成功返回的 Membernil 呈现不同的页面。