【发布时间】:2017-09-17 19:14:15
【问题描述】:
我希望能够通过 :meta 映射在 phoenix 状态下传递用户元数据,以便从 JavaScript 端访问它。更具体地说,我希望能够推送图像文件路径(字符串)并将它们与我的存在列表中的每个用户相关联。文档给出了这个示例,用于覆盖 fetch/2 函数以将用户模型数据添加到 :meta 映射中:
def fetch(_topic, entries) do
query =
from u in User,
where: u.id in ^Map.keys(entries),
select: {u.id, u}
users = query |> Repo.all |> Enum.into(%{})
for {key, %{metas: metas}} <- entries, into: %{} do
{key, %{metas: metas, user: users[key]}}
end
end
但是,当我对我的用户模型进行适当的更改时,我收到关于变量 u 和 from/2 函数以及 cannot use ^Map.keys(entries) outside of match clauses 的错误。
我去寻找尝试做类似事情的人的例子,但在 github 上找不到与我在这里尝试的类似的东西。
任何人都知道如何重新构建 fetch/2 函数以使其正常工作吗?我有一个包含 3 个字段、电子邮件、密码和图标/头像图像的基本用户模型。
【问题讨论】:
-
在文件顶部尝试
require Ecto.Query。当我不需要该文件时,您的错误很典型。还要确保你已经导入了Ecto.Query -
编辑:不,这并没有改变错误代码。即使在需要 Ecto.Query 和我的用户模型之后,我仍然会收到
warning: variable "u" does not exist and is being expanded to "u()", please use parentheses to remove the ambiguity or change the variable name作为主要警告和其他警告,如果我手动将其输入到 repl 中。 -
from是一个 Ecto.Query 宏。您不必在控制器和模型中执行此操作,因为当您执行use MyApp.Web, :controller时,它已经在 web.ex 中设置。 -
它与
import Ecto.Query合作。如果没有实际指定 from 似乎来自查询模块,则 require 不起作用。 -
好的,我会发布一个答案,以便其他人可以看到它的答案
标签: elixir phoenix-framework phoenix-channels