动态选择地图 Ecto

Dynamically selecting map Ecto

到目前为止我已经创建了查询:

query = from page in "wagtailcore_page",
      where: page.url_path == ^url_path,
      join: h in ^table_name,
      where: h.page_ptr_id == page.id

我现在想在 h

上动态 select 属性

例如,如果我传入 [:body, :footer] 我想 运行:

query = from [_page, h] in query,
      select: %{body: h.body, footer: h.footer}

我发现 Ecto.Query.API.map 看起来可以用来解决这个问题。

但是当我运行:

from [_page, h] in query, select: EctoApi.map(h, [:body])

我收到错误:

** (Ecto.Query.CompileError) `EctoApi.map(h, [:alphatext])` is not a valid query expression

根据 map documentation 底部的 IMPORTANT 消息,我们必须在执行连接时包含关系中使用的外键,但我没有这样做知道如何为我们正在做的动态连接类型做这种类型的 assoc

map 可以在不导入任何东西的情况下使用。实际功能在 Ecto 内部实现,Ecto.Query.API.map/2 仅用于文档目的。以下应该有效:

from [_page, h] in query, select: map(h, [:body, :footer])